Dela via


Kompilatorvarning (nivå 1) C4350

beteendeförändring: "member1" anropas i stället för "member2"

Anmärkningar

En rvalue kan inte bindas till en icke-const-referens. I versioner av Visual C++ före Visual Studio 2003 gick det att binda ett rvalue till en referens som inte är en const-referens i en direkt initiering. Den här koden ger nu en varning.

För bakåtkompatibilitet är det fortfarande möjligt att binda rvalues till icke-const-referenser, men standardkonverteringar föredras där det är möjligt.

Den här varningen representerar en ändring av beteendet från kompilatorn Visual C++ .NET 2002. Om den här varningen är aktiverad kan den eventuellt ges för rätt kod. Det kan till exempel ges när du använder klassmallen std::auto_ptr .

Om du får den här varningen undersöker du koden för att se om den är beroende av att rvalues binds till referenser som inte är const-referenser. Att lägga till en const till referensen eller tillhandahålla ytterligare en överlagring av const-reference kan lösa problemet.

Den här varningen är inaktiverad som standard. Mer information finns i Kompilatorvarningar som är inaktiverade som standard.

Example

I följande exempel genereras 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
}