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? :-)