编译器能否决定函数的noexcept'ness?

Mat*_* F. 5 c++ compiler-construction noexcept

我们举个例子

class X
{
    int value;
public:
    X (int def = 0) : value (def) {}

    void add (int i)
    {
        value += i;
    }
};
Run Code Online (Sandbox Code Playgroud)

显然,该函数void X::add (int)永远不会抛出任何异常.

我的问题是,编译器是否可以分析代码并决定不生成机器代码来处理异常,即使函数没有标记为noexcept

ala*_*ain 6

如果编译器可以证明某个函数永远不会抛出,那么"As-If"规则(§1.9,"C++标准的"程序执行")允许删除处理异常的代码.

然而,它不可能决定一个功能,不会抛出一般,因为它相当于解决停机问题.