Compartir a través de


Advertencia del compilador (nivel 1) C4350

cambio de comportamiento: se llamó a 'member1' en lugar de a 'member2'

Un rvalue no se puede enlazar a una referencia que no sea const. En versiones de Visual C++ anteriores a Visual Studio 2003, era posible enlazar un rvalue a una referencia que no es const en una inicialización directa. Este código ahora proporciona una advertencia.

Por motivos de compatibilidad con versiones anteriores, todavía es posible enlazar rvalues a referencias que no son const, pero se prefieren las conversiones estándar siempre que sea posible.

Esta advertencia representa un cambio de comportamiento del compilador de Visual C++ .NET 2002. Si está habilitada, es posible que esta advertencia se proporcione para un código correcto. Por ejemplo, se puede proporcionar al usar la plantilla de clase std::auto_ptr.

Si recibe esta advertencia, examine el código para ver si depende de enlazar rvalues a referencias que no sean const. Agregar un const a la referencia o proporcionar una sobrecarga de referencia const adicional puede resolver el problema.

De forma predeterminada, esta advertencia está desactivada. Para obtener más información, consulte Compiler Warnings That Are Off by Default.

El ejemplo siguiente genera la advertencia 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
}