Partager via


Avertissement du compilateur (niveau 1) C5056

opérateur 'operator-name' : déconseillé pour les types de tableaux

Notes

Les comparaisons d’égalité et relationnelles entre deux opérandes de type de tableau sont déconseillées en C++20. Pour plus d’informations, consultez la proposition C++ Standard P1120R0.

Dans Visual Studio 2019 version 16.2 et ultérieure, une opération de comparaison entre deux tableaux (malgré les similitudes de classement et d’étendue) génère désormais un avertissement de niveau 1 C5056 lorsque l’option du /std:c++latest compilateur est activée. Dans Visual Studio 2019 version 16.11 et ultérieure, il génère également un avertissement sous /std:c++20.

Exemple

Dans Visual Studio 2019 version 16.2 et ultérieure, le code suivant génère un avertissement C5056 lorsque l’option du /std:c++latest compilateur est activée. Dans Visual Studio 2019 version 16.11 et ultérieure, il génère également un avertissement sous /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
}

Pour éviter l’avertissement, vous pouvez comparer les adresses des premiers éléments :

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

Pour déterminer si le contenu de deux tableaux est identique, utilisez la fonction std::equal :

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