我读到有关过度使用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];
}
你怎么看?这有任何意义吗?还是不可行?还是不能解决问题?或者根本没有问题?:-)