命名空间
变体
操作

C++ 属性: 不确定 (自 C++26 起)

来自 cppreference.com
< cpp‎ | 语言‎ | 属性
 
 
C++ 语言
 
 
属性
(C++23)
(C++14)
(C++17)
不确定
(C++26)
(C++20)
(C++17)
(C++11)
(C++20)
 

表示变量或函数参数在未初始化的情况下具有不确定的值。

内容

[编辑] 语法

[[不确定]]

[编辑] 解释

[[不确定]] 可以应用于具有自动 存储期限 的块变量的定义,或者应用于 函数声明 的参数的声明。该属性指定,具有自动存储期限的对象的存储所包含的字节最初是 不确定 而不是错误的。

如果函数参数在声明中使用了 [[不确定]],则必须在函数的第一个声明中声明它。如果函数参数在函数的第一个声明中在一个翻译单元中使用 [[不确定]] 声明,而在另一个翻译单元的第一个声明中,对同一参数没有使用 [[不确定]],则程序是 不确定的,不需要诊断

[编辑] 注意

[[不确定]] 属性恢复了在 C++26 之前隐式引入的不确定行为。它可能使编译器认为读取不确定值的代码路径不可达。

[编辑] 示例

void f(int);
 
void g()
{
    int x [[indeterminate]]; // indeterminate value
    int 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());

[编辑] 参考

  • C++26 标准 (ISO/IEC 14882:2026)
  • 9.12.7 不确定存储 [dcl.attr.indet]