Warnung C6395
%variable% verfügt über nicht abgesenkte Lese- und/oder Schreibvorgänge vor C++17; Das Ändern des Sprachstandards kann das Verhalten des Codes ändern.
Hinweise
C++17 hat die Auswertungsreihenfolge bestimmter Ausdrücke strenger gemacht. MSVC hat die Auswertungsreihenfolge für einige Ausdrücke geändert. Daher kann das Ändern der Sprachversion das feststellbare Verhalten des Programms ändern. Bei dieser Überprüfung werden einige Fälle diagnostiziert, in denen sich die Bedeutung des Codes aufgrund des Wechsels von Sprachversionen ändert.
Codeanalysename: EVAL_ORDER_CHANGE
Beispiel
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
}
Um dieses Problem zu lösen, trennen Sie die Nebenwirkungen vom rest des Ausdrucks, um die Auswertungsreihenfolge gut definiert zu machen:
void foo(int* a, int i)
{
++i;
a[i] = i; // No warning.
}