Ale*_*kiy 5 c++ noexcept c++11
我大量使用noexcept,不幸的是如果一些传递依赖最终导致一个罕见的情况(我们不知道),崩溃是非常难以调试 - 因为被调用的noexcept原因std::terminate.
有没有办法在编译时检测这些违规?在下面的示例中,问题很明显,但默认情况下没有编译器捕获它.我意识到在所有情况下都不可能,但肯定更简单的情况应该是可能的
#include <stdexcept>
void baz()
{
throw std::runtime_error("std::terminate awaits");
}
void bar()
{
baz();
}
void foo() noexcept
{
bar();
}
Run Code Online (Sandbox Code Playgroud)
链接到godbolt:https://godbolt.org/z/Ooet58
是否有我不知道的编译器标志?如何捕获这个静态分析工具呢?
查看 Microsoft\xe2\x80\x99s 静态分析工具,它可以准确检查此违规:Don\xe2\x80\x99t throw in noexcept
\n\n编辑:该工具还可以告诉您哪些函数可以标记为 noexcept,这应该可以更轻松地显着缩小抛出函数的范围。
\n