C++ 属性: 不确定 (自 C++26 起)
来自 cppreference.com
表示变量或函数参数在未初始化的情况下具有不确定的值。
内容 |
[编辑] 语法
[[不确定]]
|
|||||||||
[编辑] 解释
[[不确定]]
可以应用于具有自动 存储期限 的块变量的定义,或者应用于 函数声明 的参数的声明。该属性指定,具有自动存储期限的对象的存储所包含的字节最初是 不确定 而不是错误的。
如果函数参数在声明中使用了 [[不确定]]
,则必须在函数的第一个声明中声明它。如果函数参数在函数的第一个声明中在一个翻译单元中使用 [[不确定]]
声明,而在另一个翻译单元的第一个声明中,对同一参数没有使用 [[不确定]]
,则程序是 不确定的,不需要诊断。
[编辑] 注意
[[不确定]]
属性恢复了在 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]