Partilhar via


C4350 de aviso (nível 1) do compilador

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

Um rvalue não pode ser vinculado a uma referência de não-const. Nas versões anteriores do Visual C++, foi possível vincular um rvalue para uma referência de não-const em uma inicialização direta. Esse código agora dá um aviso.

Para compatibilidade com versões anteriores, ainda é possível vincular rvalues referências de não-const, mas conversões padrão são preferidas, sempre que possível.

Este aviso representa uma alteração de comportamento do Visual C++.NET 2002 compilador. Se ativado, este aviso possivelmente poderia ser fornecido para o código correto. Por exemplo, ele foi dada ao usar o std::auto_ptr o modelo de classe.

Se você receber esse aviso, examine seu código para ver se ele depende de rvalues de ligação não-const referências. Adicionando uma const à referência ou fornecendo uma sobrecarga adicional de referência const pode resolver o problema.

Este aviso está desativado por padrão. Para obter mais informações, consulte Compilador avisos que está desativado por padrão.

O exemplo a seguir 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
}