Upozornění C6395
%variable% má nesekvenované čtení a/nebo zápisy před C++17; změna jazykového standardu může změnit chování kódu.
Poznámky
C++17 ztěžoval pořadí vyhodnocování určitých výrazů. Služba MSVC splnila, což změnilo pořadí vyhodnocení pro některé výrazy. Změna jazykové verze tak může změnit pozorovatelné chování programu. Tato kontrola diagnostikuje některé případy, kdy se význam kódu mění kvůli přepínání jazykových verzí.
Název analýzy kódu: EVAL_ORDER_CHANGE
Příklad
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
}
Chcete-li tento problém vyřešit, oddělte vedlejší účinky od zbytku výrazu, aby bylo pořadí vyhodnocení dobře definované:
void foo(int* a, int i)
{
++i;
a[i] = i; // No warning.
}