c++ - 编译器可以决定函数的 noexcept'ness 吗?

标签 c++ compiler-construction noexcept

举个例子

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/

相关文章:

C++ - 检查字符串是否为空

c++ - 我的 win32 程序应该在哪里保存它的文件?

parsing - 构建 IDE/编译器所需的概念

C 结构填充。嵌套结构

c++ - 是否有自动noexcept说明符?

c++ - 为什么没有 std::uninitialized_move_if_noexcept?

c++ - 添加 `noexcept(false)` 是否对代码有任何好处?

c++ - Constexpr 构造和静态成员不起作用

c - 谁决定寄存器存储类的实际存储?

c++ - 如何在键是自定义对象的情况下使用 stdext::hash_map?