在GCC或Clang中是否有标志,当一个标记为noexcept
的函数试图调用一个未被标记为noexcept
的函数时,会抛出编译时错误(或警告)?
如果没有,那么当您从以前标记为noexcept
的函数中删除noexcept
时,该代码的哪些部分受到影响怎么办?难道没有任何方法吗?
noexcept
即使被调用的函数没有标记也有意义。以平方根为例,如果传入一个负数可能会抛出异常。当在一个确保只使用正数调用的函数中使用它时,可以将其标记。同样的,如果捕获异常也是如此。noexcept
函数(直接)抛出异常。(参见https://clang.llvm.org/docs/DiagnosticsReference.html#wexceptions) 对于我的自定义assert宏,在constexpr中工作,我已经禁止了它,MSVC也一样。我不能确定GCC,因为我不太常用它。
reinterpret_cast()
来将一个非 noexcept
函数转换为 noexcept
函数,但需要在显式检查要求后进行。这样,(间接的)编译器检查仍然有效。 - darkdragon