Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      noexcept operator(since C++11)

      From cppreference.com
      <cpp‎ |language
       
       
      C++ language
      General topics
      Flow control
      Conditional execution statements
      Iteration statements (loops)
      Jump statements
      Functions
      Function declaration
      Lambda function expression
      inline specifier
      Dynamic exception specifications(until C++17*)
      noexcept specifier(C++11)
      Exceptions
      Namespaces
      Types
      Specifiers
      constexpr(C++11)
      consteval(C++20)
      constinit(C++20)
      Storage duration specifiers
      Initialization
      Expressions
      Alternative representations
      Literals
      Boolean -Integer -Floating-point
      Character -String -nullptr(C++11)
      User-defined(C++11)
      Utilities
      Attributes(C++11)
      Types
      typedef declaration
      Type alias declaration(C++11)
      Casts
      Memory allocation
      Classes
      Class-specific function properties
      Special member functions
      Templates
      Miscellaneous
       
      Expressions
      General
      Literals
      Operators
      Conversions
       
      Exceptions
      try block
      Throwing exceptions
      Handling exceptions
      Exception specification
          noexcept specification(C++11)
          dynamic specification(until C++17*)
      noexcept operator(C++11)
       

      Thenoexcept operator performs a compile-time check that returnstrue if an expression is declared to not throw any exceptions.

      It can be used within a function template'snoexcept specifier to declare that the function will throw exceptions for some types but not others.

      Contents

      [edit]Syntax

      noexcept(expression)

      Returns aprvalue of typebool. The result istrue ifthe set ofpotential exceptions of theexpression is empty(until C++17)expression is specified to benon-throwing(since C++17), andfalse otherwise.

      expression is anunevaluated operand.

      Ifexpression is a prvalue,temporary materialization is applied.

      (since C++17)

      [edit]Notes

      Even ifnoexcept(expr) istrue, an evaluation ofexpr may still throw as the result of encountering undefined behavior.

      Ifexpression is of a class type or (possibly multidimensional) array thereof, temporary materialization requires the destructor be non-deleted and accessible.

      (since C++17)

      [edit]Keywords

      noexcept

      [edit]Example

      Run this code
      #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<<"may_throw() is noexcept("<<noexcept(may_throw())<<")\n""no_throw() is noexcept("<<noexcept(no_throw())<<")\n""lmay_throw() is noexcept("<<noexcept(lmay_throw())<<")\n""lno_throw() is noexcept("<<noexcept(lno_throw())<<")\n""~T() is 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"T(rvalue T) is noexcept("<<noexcept(T(std::declval<T>()))<<")\n""T(lvalue T) is noexcept("<<noexcept(T(t))<<")\n""U(rvalue U) is noexcept("<<noexcept(U(std::declval<U>()))<<")\n""U(lvalue U) is noexcept("<<noexcept(U(u))<<")\n""V(rvalue V) is noexcept("<<noexcept(V(std::declval<V>()))<<")\n""V(lvalue V) is noexcept("<<noexcept(V(v))<<")\n";}

      Output:

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

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      CWG 2722C++17it was unclear whether temporary materialization
      is applied ifexpression is a prvalue
      it is applied
      in this case
      CWG 2792C++11thenoexcept operator was required to determine whether exceptions
      may be thrown in the case of encountering undefined behavior
      not required

      [edit]See also

      noexcept specifier(C++11) specifies whether a function could throw exceptions[edit]
      Dynamic exception specification(until C++17) specifies what exceptions are thrown by a function(deprecated in C++11)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/language/noexcept&oldid=174682"

      [8]ページ先頭

      ©2009-2025 Movatter.jp