Share via


Avertissement C6395

%variable% a des lectures et/ou écritures sans file d’attente avant C++17 ; la modification de la norme de langage peut modifier le comportement du code.

Notes

C++17 a rendu l’ordre d’évaluation de certaines expressions plus strict. MSVC est conforme, ce qui a modifié l’ordre d’évaluation pour certaines expressions. Par conséquent, la modification de la version du langage peut modifier le comportement observable du programme. Cette case activée diagnostique certains des cas où la signification du code change en raison du changement de version du langage.

Nom de l’analyse du code : EVAL_ORDER_CHANGE

Exemple

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
}

Pour résoudre ce problème, séparez les effets secondaires du reste de l’expression pour que l’ordre d’évaluation soit bien défini :

void foo(int* a, int i)
{
    ++i;
    a[i] = i; // No warning.
}