Share via


Advertencia C6395

%variable% tiene lecturas no puestas en cola o escrituras antes de C++17; cambiar el estándar de idioma podría cambiar el comportamiento del código.

Comentarios

C++17 hizo que el orden de evaluación de determinadas expresiones sea más estricto. MSVC cumplió, que cambió el orden de evaluación de algunas expresiones. Por lo tanto, cambiar la versión del idioma podría cambiar el comportamiento observable del programa. Esta comprobación diagnostica algunos de los casos en los que el significado del código cambia debido a la conmutación de versiones de idioma.

Nombre del análisis de código: EVAL_ORDER_CHANGE

Ejemplo

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
}

Para resolver este problema, separe los efectos secundarios del resto de la expresión para que el orden de evaluación esté bien definido:

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