Partilhar via


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