Aracılığıyla paylaş


Uyarı C6395

%variable% C++17'den önce sıralanmamış okuma ve/veya yazmalara sahip; dil standardını değiştirmek, kodun davranışını değiştirebilir.

Açıklamalar

C++17, belirli ifadelerin değerlendirme sırasını daha katı hale getirdi. MSVC, bazı ifadeler için değerlendirme sırasını değiştiren uyumlu hale geldi. Bu nedenle, dil sürümünü değiştirmek programın gözlemlenebilir davranışını değiştirebilir. Bu denetim, dil sürümlerini değiştirme nedeniyle kodun anlamının değiştiği bazı durumları tanılar.

Kod analizi adı: EVAL_ORDER_CHANGE

Örnek

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
}

Bu sorunu çözmek için yan etkileri ifadenin geri kalanından ayırarak değerlendirme sırasını iyi tanımlanmış hale getirin:

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