Partager via


Avertissement du compilateur (niveau 1) C4350

changement de comportement : 'membre1' appelé à la place de 'membre2'

Une valeur rvalue ne peut pas être liée à une référence non const. Dans les versions de Visual C++ antérieures à Visual Studio 2003, il était possible de lier une rvalue à une référence non const dans une initialisation directe. Ce code donne maintenant un avertissement.

Pour la compatibilité descendante, il est toujours possible de lier des valeurs rvalues à des références non const, mais les conversions standard sont préférées dans la mesure du possible.

Cet avertissement représente un changement de comportement du compilateur Visual C++ .NET 2002. Si cette option est activée, cet avertissement peut éventuellement être donné pour le code correct. Par exemple, il peut être donné lors de l’utilisation du modèle de classe std ::auto_ptr .

Si vous recevez cet avertissement, examinez votre code pour voir s’il dépend des valeurs rvalues de liaison à des références non const. L’ajout d’un const à la référence ou la fourniture d’une surcharge de référence const supplémentaire peut résoudre le problème.

Cet avertissement est désactivé par défaut. Pour plus d'informations, consultez Compiler Warnings That Are Off by Default.

L’exemple suivant génère l’erreur 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
}