Per*_*-lk 16 c++ noexcept c++11
如果我将一个函数标记为noexcept(false),或任何其他评估为false的表达式,它意味着什么?(1)我是否向编译器确保该函数可以抛出异常?,(2)或者我是否确定它是否可以抛出异常?
最后,如果省略说明noexcept符,它等同于noexcept(false)或仅等同于上述的(2)nd含义?
Rei*_*ica 16
通过指定noexcept(true),您声称该函数永远不会抛出异常.通过指定noexcept(false)或不指定任何内容,您不会声称该函数永远不会抛出异常.
所以它基本上是你的声明(2),但请注意,对于编译器来说,这相当于你的语句(1).如果编译器不确定函数不会抛出,它必须假设它可以.
标准的相关部分是C++ 11 15.4/12:
无A功能异常规范或与异常规范的形式的,其中恒定表达产率允许的所有异常.一个异常规范是 不抛出,如果它的形式为,,或其中所述恒定表达 产率.具有非抛出异常规范的函数不允许任何异常.
noexcept(constant-expression)falsethrow()noexceptnoexcept(constant-expression)true
该规则只有两个偏差.一个是析构函数 - 在析构函数上没有异常规范,为析构函数提供了与默认生成的异常规范相同的异常规范.也就是说,noexcept(true)当且仅当从默认生成的析构函数直接调用的所有函数都是noexcept(true).
另一个是释放函数(operator delete) - 没有显式异常规范的解除分配函数被视为noexcept(true).
| 归档时间: |
|
| 查看次数: |
1206 次 |
| 最近记录: |