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 vérification diagnostique certains des cas où la signification du code change en raison du changement de versions linguistiques.
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.
}