Référence non constante liée à une référence temporaire : anomalie de Visual Studio
Ce problème survient lors de la compilation de code qui tente de lier une référence non constante à un objet temporaire. Bien que Visual Studio autorise la compilation d'un tel code, d'autres compilateurs, comme gcc, l'identifient comme une erreur de compilation.
Explication
Dans l'exemple fourni :
class Zebra {int x;}; Zebra goo() {Zebra z; return z;} void foo(Zebra &x) { Zebra y; x = y; foo(goo()); }
Le code tente de lier une référence non constante (Zebra &x) à un objet temporaire renvoyé par la fonction goo(). Selon la norme C, cela devrait entraîner une erreur de compilation.
Extension de Visual Studio
Cependant, Visual Studio possède une ancienne extension qui permet ce comportement. Cette extension traite essentiellement les références à des objets temporaires comme s'il s'agissait de références à des objets non temporaires.
Cette extension a été introduite pour prendre en charge les bases de code existantes. Cependant, cela peut conduire à un comportement inattendu et n'est généralement pas recommandé.
Approche recommandée
Pour éviter ces anomalies, il est préférable de désactiver l'extension à l'aide du /Za indicateur du compilateur. Cela garantira que le code adhère à la norme C et sera traité de manière cohérente par différents compilateurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!