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.
}