添加noexcept是否会破坏二进制兼容性?

Fel*_*lix 14 c++ binary-compatibility noexcept

简单的问题:如果改变这个:

void someMethod();
Run Code Online (Sandbox Code Playgroud)

void someMethod() noexcept;
Run Code Online (Sandbox Code Playgroud)

它会破坏二进制兼容性,还是方法签名保持不变?

dar*_*une 4

方法签名保持不变吗?

是的。https://en.cppreference.com/w/cpp/language/noexcept_spec

仅异常规范不同的函数不能重载(就像返回类型一样,异常规范是函数类型的一部分,但不是函数签名的一部分)(自 C++17 起)。

它会破坏二进制兼容性吗?

可能不是,但标准并不能保证任何东西(AFAIK)。

  • 您说了“不”,但随后引用了规范的一部分,这意味着答案是“是”。:) “_异常规范是..不是函数签名的一部分_” - 因此,添加 `noexcept` 不应更改函数签名,并且应保持不变。 (4认同)