Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      C++ attribute: indeterminate(since C++26)

      From cppreference.com
      <cpp‎ |language‎ |attributes
       
       
      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
       
      Declarations
       
      Attributes
      (C++23)
      (C++11)(until C++26)
      (C++14)
      indeterminate
      (C++26)
      (C++20)
      (C++17)
      (C++11)
      (C++20)
       

      Indicates that the variable or function parameter has an indeterminate value if it is not initialized.

      Contents

      [edit]Syntax

      [[indeterminate]]

      [edit]Explanation

      [[indeterminate]] can be applied to the definition of a block variable with automaticstorage duration or to a declaration of a parameter of afunction declaration. The attribute specifies that the bytes comprising the storage of an object with automatic storage duration is initiallyindeterminate rather than erroneous.

      If a function parameter is declared with[[indeterminate]], it must be declared in the first declaration of its function. If a function parameter is declared with[[indeterminate]] in the first declaration of its function in one translation unit and the same function is declared without[[indeterminate]] on the same parameter in its first declaration in another translation unit, the program isill-formed, no diagnostic required.

      [edit]Notes

      The[[indeterminate]] attribute restores the undefined behavior that was implicitly introduced until C++26. It may make compilers consider a code path reading an indeterminate value unreachable.

      [edit]Example

      Run this code
      void f(int); void g(){int x[[indeterminate]];// indeterminate valueint y;// erroneous value     f(x);// undefined behavior    f(y);// erroneous behavior} struct T{    T(){}int x;}; void h(T a[[indeterminate]], T b){    f(a.x);// undefined behavior when called below    f(b.x);// erroneous behavior when called below} h(T(), T());

      [edit]References

      • C++26 standard (ISO/IEC 14882:2026):
      • 9.12.7 Indeterminate storage [dcl.attr.indet]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/language/attributes/indeterminate&oldid=174615"

      [8]ページ先頭

      ©2009-2025 Movatter.jp