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));