Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
}