Aviso do compilador (nível 1) C5056
operador 'operator-name': preterido para tipos de matriz
Comentários
A igualdade e as comparações relacionais entre dois operandos do tipo de matriz são preteridas no C++20. Para obter mais informações, confira a proposta C++ Padrão P1120R0.
No Visual Studio 2019 versão 16.2 e posterior, uma operação de comparação entre duas matrizes (apesar das semelhanças de extensão e classificação) agora produz um aviso C5056 de nível 1 quando a opção /std:c++latest
do compilador está habilitada. No Visual Studio 2019 versão 16.11 e posterior, ela também produz um aviso sob /std:c++20
.
Exemplo
No Visual Studio 2019 versão 16.2 e posterior, o código a seguir produz o aviso C5056 quando a opção /std:c++latest
do compilador está habilitada. No Visual Studio 2019 versão 16.11 e posterior, ela também produz um aviso em /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 o aviso, você pode comparar os endereços dos primeiros 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 se o conteúdo de duas matrizes é igual, use a função std::equal
:
std::equal(std::begin(a), std::end(a), std::begin(b), std::end(b));