在线文档教程
C++
语言 | Language

noexcept operator

除运算符%28外,自C++11%29

noexcept运算符执行编译时检查,如果声明表达式不引发任何异常,则返回true。

它可以在函数模板%27中使用。除说明符声明该函数将对某些类型抛出异常,但不抛出其他类型的异常。

句法

noexcept( expression )

返回prvalue类型bool...

解释

noexcept运算符不计算表达式。

The result is false if the expression contains at least one of the following potentially evaluated constructs: call to any type of function that does not have non-throwing exception specification, unless it is a constant expression. throw expression. dynamic_cast expression when the target type is a reference type, and conversion needs a run time check typeid expression when argument type is polymorphic class type In all other cases the result is true.(until C++17)
The result is true if the set of potential exceptions of the expression is empty, and false otherwise.(since C++17)

  • 调用不具有非引发异常规范的任何类型的函数,除非它是常数表达式...

  • throw表达...

  • dynamic_cast表达当目标类型是引用类型时,转换需要运行时检查。

  • typeid表达当参数类型是多态类类型时

在所有其他情况下,结果是true...

%28直到C++17%29,结果是true如果潜在例外的表达式是空的,并且false否则。

%28自C++17%29

关键词

noexcept...

二次

#include <iostream> #include <utility> #include <vector> void may_throw( void no_throw() noexcept; auto lmay_throw = []{}; auto lno_throw = []() noexcept {}; class T{ public: ~T(){} // dtor prevents move ctor // copy ctor is noexcept }; class U{ public: ~U(){} // dtor prevents move ctor // copy ctor is noexcept(false) std::vector<int> v; }; class V{ public: std::vector<int> v; }; int main() { T t; U u; V v; std::cout << std::boolalpha << "Is may_throw() noexcept? " << noexcept(may_throw()) << '\n' << "Is no_throw() noexcept? " << noexcept(no_throw()) << '\n' << "Is lmay_throw() noexcept? " << noexcept(lmay_throw()) << '\n' << "Is lno_throw() noexcept? " << noexcept(lno_throw()) << '\n' << "Is ~T() noexcept? " << noexcept(std::declval<T>().~T()) << '\n' // note: the following tests also require that ~T() is noexcept because // the expression within noexcept constructs and destroys a temporary << "Is T(rvalue T) noexcept? " << noexcept(T(std::declval<T>())) << '\n' << "Is T(lvalue T) noexcept? " << noexcept(T(t)) << '\n' << "Is U(rvalue U) noexcept? " << noexcept(U(std::declval<U>())) << '\n' << "Is U(lvalue U) noexcept? " << noexcept(U(u)) << '\n' << "Is V(rvalue V) noexcept? " << noexcept(V(std::declval<V>())) << '\n' << "Is V(lvalue V) noexcept? " << noexcept(V(v)) << '\n'; }

二次

产出:

二次

Is may_throw() noexcept? false Is no_throw() noexcept? true Is lmay_throw() noexcept? false Is lno_throw() noexcept? true Is ~T() noexcept? true Is T(rvalue T) noexcept? true Is T(lvalue T) noexcept? true Is U(rvalue U) noexcept? false Is U(lvalue U) noexcept? false Is V(rvalue V) noexcept? true Is V(lvalue V) noexcept? false

二次

另见

noexcept specifierrequires a function to not throw any exceptions (C++11)
exception specificationspecifies what exceptions are thrown by a function (deprecated)

© cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

http://en.cppreference.com/w/cpp/language/no以外