警告 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.
}