Udostępnij za pośrednictwem


Ostrzeżenie C6395

%variable% ma niesekwencjonowane odczyty i/lub zapisy przed C++17; zmiana standardu języka może zmienić zachowanie kodu.

Uwagi

Język C++17 uczynił kolejność obliczania niektórych wyrażeń bardziej rygorystycznym. Program MSVC jest zgodny, co zmieniło kolejność obliczania dla niektórych wyrażeń. W związku z tym zmiana wersji językowej może spowodować zmianę zauważalnego zachowania programu. Ta kontrola diagnozuje niektóre przypadki, w których znaczenie kodu zmienia się z powodu przełączania wersji językowych.

Nazwa analizy kodu: EVAL_ORDER_CHANGE

Przykład

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
}

Aby rozwiązać ten problem, oddziel efekty uboczne od pozostałej części wyrażenia, aby kolejność oceny została dobrze zdefiniowana:

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