名稱空間
變體
操作

C 屬性:unsequenced, reproducible (自 C23 起)

來自 cppreference.com
< c‎ | 語言‎ | 屬性

向編譯器提供有關函式訪問物件的資訊,以便推斷函式呼叫的某些屬性。

目錄

[編輯] 語法

[[ unsequenced ]]
[[ __unsequenced__ ]]
(1)
[[ reproducible ]]
[[ __reproducible__ ]]
(2)
1) 指示函式是無副作用的冪等的無狀態的獨立的
2) 指示函式是無副作用且冪等的。

[編輯] 解釋

這些屬性適用於函式宣告符或具有函式型別的型別說明符。相應的屬性是函式型別的一個特性。

[編輯] 無副作用 (Effectless)

如果函式呼叫期間進行的任何儲存操作都是對與該呼叫同步的物件的修改,則該函式呼叫的評估是無副作用的;如果此外該操作是可觀察的,則對該物件的所有訪問必須基於函式的一個唯一指標引數。

[編輯] 冪等 (Idempotent)

如果第二次評估 E 可以緊接在原始評估之後進行,且不改變任何結果值或執行的可觀察狀態,則評估 E 是冪等的。

[編輯] 無狀態 (Stateless)

如果函式 F 或由 F 呼叫的函式中任何具有靜態或執行緒儲存期的物件定義是 const 但不是 volatile 限定的,則函式 F 是無狀態的。

[編輯] 獨立 (Independent)

如果對於透過不基於呼叫引數的左值被函式 F 的呼叫觀察到的任何物件 X,在同一程式執行期間對 F 的所有呼叫中對 X 的所有訪問都觀察到相同的值;否則,如果訪問基於指標引數,則應存在唯一的此類指標引數 P,使得對 X 的任何訪問都應是對基於 P 的左值的訪問。

如果物件 X 和函式呼叫都同步,如果 X 不是呼叫的區域性變數,如果 X 的生命週期在函式呼叫之前開始,並且如果在呼叫期間訪問了 X,則物件 X 被函式呼叫觀察到;在呼叫之前儲存的 X 的最後一個值(如果有)被稱為被呼叫觀察到的 X 的值。

[編輯] 註釋

這些屬性用於編譯器最佳化目的。

如果函式是可重現的,則多次後續呼叫可以被視為一次呼叫。

如果函式是無序的,則多次後續呼叫可以被視為一次呼叫,並且這些呼叫可以並行化並任意重新排序。