Partilhar via


Aviso do compilador (nível 1) C4350

alteração de comportamento: “member1” chamado em vez de “member2”

Um rvalue não pode ser associado a uma referência de não const. Em versões anteriores do Visual C++, era possível associar um rvalue a uma referência de não const em uma inicialização direta. Esse código agora fornece um aviso.

Para compatibilidade com versões anteriores, ainda é possível associar rvalues referências de não const, mas conversões padrão são preferenciais onde for possível.

Esse aviso representa uma alteração de comportamento do compilador do Visual C++ .NET 2002. Se habilitado, esse aviso possivelmente pôde ser determinado para o código correta. Por exemplo, pode ser atribuído ao usar o modelo da classe de std::auto_ptr .

Se você obtiver esse aviso, examine o código para ver se depende dos rvalues associando as referências de não const. Adicionar um const a referência ou fornecer uma sobrecarga adicional de const- referência podem resolver o problema.

Esse aviso é desativada por padrão. Para obter mais informações, consulte Avisos do compilador que estão por padrão.

O seguinte exemplo gera C4350:

// C4350.cpp
// compile with: /W1
#pragma warning (default : 4350)
class A {};

class B
{
public:
   B(B&){}
   // try the following instead
   // B(const B&){}

   B(A){}
   operator A(){ return A();}
};

B source() { return A(); }

int main()
{
   B ap(source());   // C4350
}