Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
%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
Následující příklad vygeneruje C6395:
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.
}