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