noexcept
過度に使用すると、テスト可能なライブラリが妨げられる可能性があるという懸念について読みました。
検討:
T& vector::front() noexcept {
assert(!empty()); // <- this may throw in some test-frameworks
return data[0];
}
noexcept
コンパイラーによる注釈を使用すると、例外コードを最適化できます。これにより、適切な処理assert()
(または作成者がここでテストに使用したい関数)を適切に処理できなくなる可能性があります。
したがって、図書館で無条件を使用することは決してなくnoexcept
、常にそれをam-I-in-a-test-conditionと「リンク」することが可能かどうか疑問に思います。このような:
#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];
}
そして多分それをマクロとして追加します(しかし、私はそれが嫌いです):
#define NOEXCEPT noexcept(ndebug)
T& vector::front() NOEXCEPT {
assert(!empty());
return data[0];
}
どう思いますか?これはまったく意味がありますか?それとも実現可能ではありませんか?それとも問題を解決しませんか?それとも全く問題ありませんか?:-)