定义运算符有任何意义吗< as noexcept?

问题描述 投票:0回答:1

我知道定义例如“将构造函数移动为

noexcept
(如果可能的话),我想我理解它的效果。

但我从未见过关于

operator<()
类型的类似讨论,例如在
std::set<>

非投掷比较器是否也有一些(潜在的)优化效果(当用于

std::set<>
std::map<>
std::sort()
和类似应用时)?

c++ comparator
1个回答
0
投票

移动构造函数有些特殊,因为有一个明显的回退。在不允许移动抛出异常的情况下,您可以调用

noexcept
移动构造函数,当移动构造函数不是
noexcept
时,您可以回退到副本。因此,将移动构造函数声明为
noexcept
是一种优化。对于
<
而言,当
<
不是
noexcept
时,没有明显的后备方案,其成本会更高。您可以拨打
<
或不拨打。

否则,

<
与任何其他
noexcept
具有相同的优点,编译器知道它永远不会抛出(如果抛出,则调用
std::terminate
,但不一定会发生通常的堆栈展开)。

© www.soinside.com 2019 - 2024. All rights reserved.