Compartir a través de


Advertencia del compilador (nivel 1) C5056

operador 'nombre_de_operador': en desuso para los tipos de matriz

Comentarios

Las comparaciones relacionales y de igualdad entre dos operandos de tipo de matriz están en desuso en C++20. Para más información, consulte la propuesta del estándar de C++ P1120R0.

En La versión 16.2 y posteriores de Visual Studio 2019, una operación de comparación entre dos matrices (a pesar de las similitudes de rango y extensión) ahora genera una advertencia de nivel 1 C5056 cuando está habilitada la opción /std:c++latest del compilador. En la versión 16.11 y posteriores de Visual Studio 2019, también genera una advertencia en /std:c++20.

Ejemplo

En la versión 16.2 de Visual Studio 2019 y versiones posteriores, el código siguiente produce una advertencia C5056 cuando la opción del compilador /std:c++latest está habilitada. En la versión 16.11 y posteriores de Visual Studio 2019, también genera una advertencia en /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
}

Para evitar la advertencia, puede comparar las direcciones de los primeros elementos:

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

Para determinar si el contenido de dos matrices es igual, use la función std::equal:

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