Partilhar via


Aviso C6395

%variável% tem leituras e/ou gravações não sequenciadas antes do C++17; Alterar o padrão de idioma pode alterar o comportamento do código.

Comentários

O C++17 tornou mais rigorosa a ordem de avaliação de certas expressões. O MSVC cumpriu, o que alterou a ordem de avaliação de algumas expressões. Assim, alterar a versão do idioma pode alterar o comportamento observável do programa. Essa verificação diagnostica alguns dos casos em que o significado do código muda devido à mudança de versão de idioma.

Nome da análise de código: EVAL_ORDER_CHANGE

Exemplo

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 esse problema, separe os efeitos colaterais do restante da expressão para tornar a ordem de avaliação bem definida:

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