コンパイラの警告 (レベル 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));