分享方式:


警告 C6395

%variable% 在 C++17 之前已取消佇列讀取和/或寫入;變更語言標準可能會變更程式碼的行為。

備註

C++17 使特定運算式的評估順序更加嚴格。 MSVC 已遵循,這會變更某些運算式的評估順序。 因此,變更語言版本可能會變更程式可觀察的行為。 這項檢查會診斷部分案例,其中程式碼的意義會因為切換語言版本而變更。

程式碼分析名稱: EVAL_ORDER_CHANGE

範例

void foo(int* a, int i)
{
    a[++i] = i; // Warning: 'i' has unsequenced reads and/or writes before C++17; changing the language standard might change the behavior of the code
}

若要解決此問題,請將副作用與運算式的其餘部分分開,以妥善定義評估順序:

void foo(int* a, int i)
{
    ++i;
    a[i] = i; // No warning.
}