Compilerwarnung (Stufe 1) C5056

Operator 'Operatorname': veraltet für Arraytypen

Hinweise

Gleichheit und relationale Vergleiche zwischen zwei Operanden des Arraytyps sind in C++20 veraltet. Weitere Informationen finden Sie unter C++-Standardvorschlag P1120R0.

In Visual Studio 2019, Version 16.2 und höher, erzeugt ein Vergleichsvorgang zwischen zwei Arrays (trotz Rang- und Umfangsähnlichkeiten) jetzt eine Warnung der Ebene 1 C5056, wenn die /std:c++latest Compileroption aktiviert ist. In Visual Studio 2019, Version 16.11 und höher, erzeugt sie auch eine Warnung unter /std:c++20.

Beispiel

In Visual Studio 2019, Version 16.2 und höher, erzeugt der folgende Code die Warnung C5056, wenn die /std:c++latest Compileroption aktiviert ist. In Visual Studio 2019, Version 16.11 und höher, wird auch eine Warnung unter /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
}

Sie können die Adressen der ersten Elemente vergleichen, um zu vermeiden, dass eine Warnung ausgelöst wird:

// 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; }
}

Um zu ermitteln, ob der Inhalt von zwei Arrays gleich ist, verwenden Sie die Funktion std::equal:

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