名稱空間
變體
操作

C++ 屬性: indeterminate (自 C++26 起)

來自 cppreference.com
< cpp‎ | 語言‎ | 屬性
 
 
C++ 語言
通用主題
流程控制
條件執行語句
if
迭代語句(迴圈)
for
range-for (C++11)
跳轉語句
函式
函式宣告
Lambda 函式表示式
inline 說明符
動態異常規範 (直到 C++17*)
noexcept 說明符 (C++11)
異常
名稱空間
型別
說明符
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
儲存期說明符
初始化
表示式
替代表示
字面量
布林 - 整型 - 浮點型
字元 - 字串 - nullptr (C++11)
使用者定義 (C++11)
工具
屬性 (C++11)
型別
typedef 宣告
類型別名宣告 (C++11)
型別轉換
記憶體分配
類特有的函式屬性
explicit (C++11)
static

特殊成員函式
模板
雜項
 
 
屬性
(C++23)
(C++11)(直至 C++26)
(C++14)
(C++17)
indeterminate
(C++26)
(C++20)
(C++17)
(C++17)
(C++11)
(C++20)
 

指示變數或函式引數在未初始化時具有不確定值。

目錄

[編輯] 語法

[[indeterminate]]

[編輯] 解釋

[[indeterminate]] 可應用於具有自動儲存期的塊變數定義或函式宣告的引數宣告。該屬性指定具有自動儲存期的物件的儲存位元組最初是不確定的,而不是錯誤的。

如果函式引數宣告帶有 [[indeterminate]],則必須在其函式的首次宣告中宣告。如果函式引數在其函式在某個翻譯單元中的首次宣告中宣告帶有 [[indeterminate]],而同一函式在另一個翻譯單元中的首次宣告中在同一引數上未宣告 [[indeterminate]],則程式格式錯誤,無需診斷

[編輯] 注意

[[indeterminate]] 屬性恢復了直到 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]