【发布时间】:2016-12-07 14:17:57
【问题描述】:
举个例子
class X
{
int value;
public:
X (int def = 0) : value (def) {}
void add (int i)
{
value += i;
}
};
显然,void X::add (int) 函数永远不会抛出任何异常。
我的问题是,即使函数没有标记为noexcept,编译器是否可以分析代码并决定不生成机器码来处理异常?
【问题讨论】:
-
我很好奇,你为什么想(知道)这个?
-
你有没有检查你的编译器生成的代码?
-
它可以,就像它可以判断一个函数是
const还是constexpr。毕竟是编译器。它是否确实这样做以及它是否确实使用该信息是另一个问题。 -
“很明显,
void X::add (int)函数永远不会抛出任何异常。” -- 对于您和我正在使用的特定编译器来说可能是正确的,但如果某些编译器可以选择在有符号整数溢出时抛出异常,我不会感到惊讶。
标签: c++ compiler-construction noexcept