gpt4 book ai didi

C++省略 `noexcept` 说明符与 `noexcept(false)` ,它们的确切含义是什么?

转载 作者:IT老高 更新时间:2023-10-28 22:19:16 26 4
gpt4 key购买 nike

如果我将函数标记为 noexcept(false),或任何其他计算结果为 false 的表达式,这意味着什么? (1) 我是否向编译器保证该函数可以抛出异常?,(2) 还是我不保证它是否可以抛出异常?

最后,如果我省略了noexcept说明符,它就等价于noexcept(false),还是只等价于上面所说的(2)nd含义?

最佳答案

通过指定 noexcept(true) ,您声称该函数从不抛出异常。通过指定 noexcept(false) ,或不指定任何内容,您并没有声称该函数从不抛出异常。

所以它基本上是您的语句 (2),但请注意,对于编译器,这相当于您的语句 (1)。如果编译器不能保证函数不会抛出,它必须假设它可以。

标准的相关位是C++11 15.4/12:

A function with no exception-specification or with an exception-specification of the form noexcept(<i>constant-expression</i>) where the constant-expression yields false allows all exceptions. An exception-specification is non-throwing if it is of the form throw(), noexcept, or noexcept(<i>constant-expression</i>) where the constant-expression yields true. A function with a non-throwing exception-specification does not allow any exceptions.

与该规则只有两个偏差。一种是析构函数——在析构函数上不放置异常规范会为析构函数提供与默认生成的异常规范相同的异常规范。也就是说,noexcept(true)当且仅当将从默认生成的析构函数直接调用的所有函数都是 noexcept(true) .

另一个是释放函数 (operator delete)——没有明确异常规范的释放函数被视为 noexcept(true) .

关于C++省略 `noexcept` 说明符与 `noexcept(false)` ,它们的确切含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29776364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com