是否有自动noexcept说明符?

Inb*_*ong 26 c++ noexcept c++11 c++14

我听说noexcept关键字更像是'它永远不应该抛出异常',而不是'它没有'.

我不认为使用noexcept关键字是好的,如果我不确定它是否会抛出异常,但noexcept关键字有时与移动构造函数中的性能有关.

所以我尝试使用noexcept限定符,但如果它在定义中有多个语句就变得更难,它变成了一种复制和粘贴的东西.

template <class T>
void f(T&& t)
    noexcept(noexcept(statement_1) &&
             noexcept(statement_2) &&
             noexcept(statement_3) &&
             noexcept(statement_4) &&
             noexcept(statement_5))
{
    statement_1;
    statement_2;
    statement_3;
    statement_4;
    statement_5;
}
Run Code Online (Sandbox Code Playgroud)

我认为编译器可以判断一个函数的定义是否包含非抛出语句,因此noexcept如果有一个类似的表达式会更容易使用noexcept(auto),但似乎标准中没有这样的东西.

有没有办法简化noexcept表达式?

Ily*_*pov 10

目前没有.但是,有一个关于该主题的提案,提出了noexcept(auto)语法:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4473 该提案的状态是"需要进一步的工作" "根据Botond Ballo的"旅行报告:Lenexa的C++标准会议,2015年5月",https://botondballo.wordpress.com/2015/06/05/trip-report-c-standards-meeting-in-lenexa-may -2015 /

进一步的工作.该提案的方向很有希望,但它要么不够充实,要么对一个或多个设计点有特定关注.鼓励作者返回修改后的提案,该提案更加充实和/或解决所述问题.

...

noexcept(auto),它基本上意味着"从它调用的函数的noexcept-ness中推导出该函数的noexcept-ness.与返回类型推导一样,这要求在使用该功能的每个翻译单元中可以使用该功能的主体.提出这一点,以及将异常规范作为类型系统的一部分的提议,这意味着修改函数的主体可以改变函数的类型(再次类似于返回类型推导),但人们并不过分关注那.

  • 该提案目前有进展吗?已经2020年了。我只是需要该功能(并且想知道为什么它还不是标准的一部分)。 (11认同)
  • 如果我们有自动返回类型,我不明白这种阻碍...... (4认同)