C++ 是否有必要为一个几乎什么都不做的函数编写noexcept?

C++ 是否有必要为一个几乎什么都不做的函数编写noexcept?,c++,C++,如果我有这样的东西 struct A{ int x; constexpr A() : x(0){} constexpr void set(){ x = 0; } constexpr bool check()const{ return x == 5; } }; 写入设置和检查作为noexcept是否有任何好处/区别 概括来说:我是否需要编写只对整数类型执行操作的函数,如noexcept?noexcept有两个目的:它描述了一个接口,并且提高了性能。第一个是很重要的

如果我有这样的东西

struct A{
    int x;
    constexpr A() : x(0){}
    constexpr void set(){ x = 0; }
    constexpr bool check()const{ return x == 5; }
};
写入
设置
检查
作为
noexcept
是否有任何好处/区别


概括来说:我是否需要编写只对整数类型执行操作的函数,如
noexcept

noexcept
有两个目的:它描述了一个接口,并且提高了性能。第一个是很重要的,即使函数很小,因为它记录了(在所有兼容版本中)即使实现变得更复杂(可能停止内联),它也将保持非抛出状态。该属性对于希望编写异常安全代码的客户机来说很重要(更改该属性可以悄悄地破坏它们)

第二个有两个组件:当主体简单且可用时,direct可能不受影响,但与类型相关联的库行为仅取决于其声明(考虑到接口思想,这是一件好事)。库倾向于只检查少数函数(特别是特殊成员函数)抛出的可能性,因此在这种情况下这不太重要,但请注意,“特殊”函数的空间会随着时间的推移而增加(例如,
交换
运算符==


结论是,当对人类读者或分析库很重要时,您应该编写
noexcept

取决于您打算如何使用数据结构和这些函数。声明这些函数
noexcept
,如果从一个大型复杂函数调用它们(该函数也被指定为
noexcept
),则使用起来会更方便。如果它们不是从这样一个函数中调用的,那就看你了。@Peter,我想,因为它们都是内联的,编译器将检查函数中的操作是否有
noexcept
,因为它无论如何都会这样做;如果对整数类型进行运算,它们将被推导出,使我的
noexcept
冗余。你对编译器将进行什么样的分析做出了一些重大假设。我一直认为这个关键字更像是对人类维护者的一个提示。