コンパイラの警告 (レベル 1) C5056

演算子 'operator-name': 配列型では非推奨です。

解説

C++ 20 では、配列型の2つのオペランドの等価比較と関係比較が非推奨とされます。 詳細については、「C++ 標準の提案 P1120R0」を参照してください。

Visual Studio 2019 バージョン16.2 以降では、2つの配列間の比較演算 (ランクと範囲の類似性に関係なく) が、コンパイラオプションが有効になっている場合に、レベル1の C5056 警告が生成される /std:c++latest ようになりました。 Visual Studio 2019 バージョン16.11 以降では、の下 /std:c++20 にも警告が生成されます。

Visual Studio 2019 バージョン16.2 以降では、コンパイラオプションが有効になっている場合 /std:c++latest 、次のコードによって警告 C5056 が生成されます。 Visual Studio 2019 バージョン16.11 以降では、以下にも警告 /std:c++20 が生成されます。

// C5056.cpp
// Compile using: cl /EHsc /W4 /std:c++latest C5056.cpp
int main() {
    int a[] = { 1, 2, 3 };
    int b[] = { 1, 2, 3 };
    if (a == b) { return 1; } // warning C5056: operator '==': deprecated for array types
}

この警告を回避するには、最初の要素のアドレスを比較します。

// C5056_fixed.cpp
// Compile using: cl /EHsc /W4 /std:c++latest C5056_fixed.cpp
int main() {
    int a[] = { 1, 2, 3 };
    int b[] = { 1, 2, 3 };
    if (&a[0] == &b[0]) { return 1; }
}

2 つの配列の内容が等しいかどうかを判断するには、std::equal 関数を使用します。

std::equal(std::begin(a), std::end(a), std::begin(b), std::end(b));