次の方法で共有


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

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

解説

C++20 では、配列型の 2 つのオペランド間の等価比較とリレーショナル比較は非推奨となっています。 詳細については、「C++ 標準提案の P1120R0」を参照してください。

Visual Studio 2019 バージョン 16.2 以降では、ランクとエクステントの類似性に関係なく、2 つの配列間の比較操作で、 /std:c++latest コンパイラ オプションが有効になっていると、レベル 1 の C5056 警告が生成されるようになりました。 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));