举个例子
class X
{
int value;
public:
X (int def = 0) : value (def) {}
void add (int i)
{
value += i;
}
};
显然,函数 void X::add (int)
永远不会抛出任何异常。
我的问题是,编译器能否分析代码并决定不生成机器代码来处理异常,即使该函数未标记为 noexcept
?
最佳答案
如果编译器可以证明一个函数永远不会抛出异常,则“As-If”规则(§1.9,C++ 标准的“程序执行”)允许删除处理异常的代码。
但是,无法确定一个函数是否永远不会抛出一般情况,因为这相当于解决了停机问题。
关于c++ - 编译器可以决定函数的 noexcept'ness 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38716837/