【问题标题】:C++ ISO noexcept of noexceptC++ ISO noexcept 的 noexcept
【发布时间】:2018-07-20 02:45:47
【问题描述】:

the C++ standard中有如下定义:

template <class T, size_t N> void swap(T (&a)[N], T (&b)[N])
      noexcept(noexcept(swap(*a, *b)));

noexcept(noexcept(swap(*a, *b))) 是做什么的?

【问题讨论】:

标签: c++ noexcept


【解决方案1】:

在函数声明中包含noexcept(x) specifier 意味着当且仅当x 计算结果为true 时,该函数是不抛出的。

noexcept(y) 也可以用作operator,如果y 是非抛出表达式,则评估为true,如果y 可能抛出,则评估为false

结合起来,这意味着void foo() noexcept(noexcept(y)); 意味着:foo 是非投掷,而y 是非投掷。

在问题的情况下,当且仅当交换数组的单个成员是非抛出时,数组的函数模板 swap 才被声明为非抛出,这是有道理的。

【讨论】:

  • 很好的答案,可能有人也想阅读ref
猜你喜欢
  • 2022-08-03
  • 2022-12-08
  • 2023-03-05
  • 1970-01-01
  • 2015-10-17
  • 2013-08-22
  • 2016-03-24
  • 2016-06-26
相关资源
最近更新 更多