j5w*_*j5w 8 c++ gcc clang visual-c++
什么时候应该将noexcept属性添加到函数中?即编译器什么时候无法判断函数抛出异常?所有的东西都应该被标记吗?或者有什么方法可以区分吗?
我不喜欢过早优化,也不喜欢过早归因。我不知道有什么方法可以像noexcept优化时分析性能一样“分析”需求。
在评估必要时,请评论最常见的编译器,例如 MSVC、GCC 等。
C ++ 核心指南建议基本上在代码不会抛出异常的地方使用它。这对于库来说非常重要,因为代码检查器使用您调用的函数来查看它是否为noexcept,否则您会收到一系列警告。
也就是说,最重要的建议是创建swap,move和析构函数noexcept。
C++ 核心指南还建议创建默认构造函数noexcept,这通常很好,但许多模式(如pImpl 习惯用法)经常在其默认构造函数中分配内存。因此,我通常noexcept在默认构造函数(或仅采用默认参数的构造函数)上使用,但如果我知道它可能会抛出异常,我会明确标记它nothrow(false)。
如果您将默认构造函数、复制构造函数、赋值运算符、移动构造函数、移动运算符或析构函数声明为
=default隐式的noexcept。所有析构函数也是隐式的noexcept。
有一种概念是,你可以标记一些东西
noexcept来表示“如果这确实抛出,继续并崩溃”。我发现这个概念有点模糊,所以在我的代码中我标记了可能抛出noexcept(false)或未指定的内容。这通常是调用new或初始化std容器的东西。
| 归档时间: |
|
| 查看次数: |
2390 次 |
| 最近记录: |