Udostępnij za pośrednictwem


Ostrzeżenie kompilatora (poziom 1) C5056

operator "operator-name": przestarzały dla typów tablic

Uwagi

Porównania równości i relacyjne między dwoma operandami typu tablicy są przestarzałe w języku C++20. Aby uzyskać więcej informacji, zobacz P1120R0 propozycji standardowej języka C++.

W programie Visual Studio 2019 w wersji 16.2 lub nowszej operacja porównania między dwiema tablicami (pomimo podobieństw rangi i zakresu) powoduje teraz wygenerowanie ostrzeżenia poziomu 1 C5056 po włączeniu /std:c++latest opcji kompilatora. W programie Visual Studio 2019 w wersji 16.11 lub nowszej zostanie również wyświetlone ostrzeżenie w obszarze /std:c++20.

Przykład

W programie Visual Studio 2019 w wersji 16.2 lub nowszej poniższy kod generuje ostrzeżenie C5056 po włączeniu /std:c++latest opcji kompilatora. W programie Visual Studio 2019 w wersji 16.11 lub nowszej zostanie również wyświetlone ostrzeżenie w obszarze /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
}

Aby uniknąć ostrzeżenia, możesz porównać adresy pierwszych elementów:

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

Aby określić, czy zawartość dwóch tablic jest równa, użyj std::equal funkcji :

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