Condividi tramite


Avviso del compilatore (livello 1) C5056

operatore 'operator-name': deprecato per i tipi di matrice

Osservazioni:

L'uguaglianza e i confronti relazionali tra due operandi di tipo matrice sono deprecati in C++20. Per altre informazioni, vedere P1120R0 proposta standard C++.

In Visual Studio 2019 versione 16.2 e successive, un'operazione di confronto tra due matrici (nonostante le analogie di classificazione e extent) genera ora un avviso di livello 1 C5056 quando l'opzione del /std:c++latest compilatore è abilitata. In Visual Studio 2019 versione 16.11 e successive genera anche un avviso in /std:c++20.

Esempio

In Visual Studio 2019 versione 16.2 e successive, il codice seguente genera l'avviso C5056 quando l'opzione del /std:c++latest compilatore è abilitata. In Visual Studio 2019 versione 16.11 e successive genera anche un avviso in /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
}

Per evitare l'avviso, è possibile confrontare gli indirizzi dei primi elementi:

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

Per determinare se il contenuto di due matrici è uguale, usare la std::equal funzione :

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