Compilerwarnung (Ebene 1) C4350
Verhaltensänderung: 'Member1' wird anstelle von 'Member2' aufgerufen
Ein Wert kann nicht an einen Nichtkonstverweis gebunden werden. In Versionen von Visual C++ vor Visual Studio 2003 konnte ein Wert an einen Nichtkonstverweis in einer direkten Initialisierung gebunden werden. Dieser Code gibt jetzt eine Warnung an.
Aus Gründen der Abwärtskompatibilität ist es weiterhin möglich, Werte an Nichtkonstverweise zu binden, aber Standardkonvertierungen werden nach Möglichkeit bevorzugt.
Diese Warnung stellt eine Verhaltensänderung vom Visual C++-Compiler .NET 2002 dar. Wenn diese Option aktiviert ist, kann diese Warnung möglicherweise für den richtigen Code angegeben werden. Beispielsweise könnte sie bei Verwendung der Klassenvorlage "std::auto_ptr " angegeben werden.
Wenn Sie diese Warnung erhalten, überprüfen Sie Den Code, um festzustellen, ob er von Bindungswerten an Nichtkonstverweise abhängt. Das Hinzufügen eines Const-Werts zum Verweis oder das Bereitstellen einer zusätzlichen Konstverweisüberladung kann das Problem lösen.
Diese Warnung ist standardmäßig deaktiviert. Weitere Informationen finden Sie unter Compiler Warnings That Are Off by Default.
Im folgenden Beispiel wird C4350 generiert:
// 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
}