Share via


Upozornění kompilátoru (úroveň 1) C5056

operator 'operator-name': deprecated for array types

Poznámky

Rovnost a relační porovnání mezi dvěma operandy typu pole jsou v jazyce C++20 zastaralé. Další informace naleznete v tématu Standardní návrh jazyka C++ P1120R0.

V sadě Visual Studio 2019 verze 16.2 a novějších verzích teď operace porovnání mezi dvěma poli (bez ohledu na pořadí a podobnosti rozsahu) vygeneruje upozornění úrovně 1 C5056, když je povolena možnost kompilátoru /std:c++latest . V sadě Visual Studio 2019 verze 16.11 a novější se také zobrazí upozornění v části /std:c++20.

Příklad

V sadě Visual Studio 2019 verze 16.2 a novějším vytvoří následující kód upozornění C5056, pokud je povolena možnost kompilátoru /std:c++latest . V sadě Visual Studio 2019 verze 16.11 a novější se také zobrazí upozornění v části /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
}

Abyste se vyhnuli upozornění, můžete porovnat adresy prvních prvků:

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

Pokud chcete zjistit, jestli je obsah dvou polí stejný, použijte std::equal funkci:

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