6 Stimmen

C++0x: noexcept(ndebug) zum Testen?

Ich habe von der Sorge gelesen, dass die übermäßige Verwendung von noexcept kann eine testbare Bibliothek behindern.

Bedenken Sie:

T& vector::front() noexcept {
    assert(!empty());         // <- this may throw in some test-frameworks
    return data[0];
}

Mit der Bemerkung mit noexcept kann der Compiler den Ausnahmecode optimieren, was eine ordnungsgemäße Behandlung von Ausnahmen verhindern würde/könnte. assert() (oder welche Funktion auch immer der Autor hier für seine Tests verwenden möchte).

Daher frage ich mich, ob es in einer Bibliothek machbar ist Verwenden Sie niemals eine unbedingte noexcept sondern immer mit einer Ich-bin-ein-Test-Bedingung zu "verknüpfen". Etwa so:

#ifdef NDEBUG    // asserts disabled
static constexpr bool ndebug = true;
#else            // asserts enabled
static constexpr bool ndebug = false;
#end

T& vector::front() noexcept(ndebug) {
    assert(!empty());
    return data[0];
}

und dann vielleicht als Makro hinzufügen (obwohl ich das hasse):

#define NOEXCEPT noexcept(ndebug)

T& vector::front() NOEXCEPT {
    assert(!empty());
    return data[0];
}

Was meinen Sie dazu? Ergibt das überhaupt einen Sinn? Oder ist es nicht machbar? Oder löst es das Problem nicht? Oder gibt es gar kein Problem? :-)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X