Maison >développement back-end >C++ >Pourquoi Visual Studio autorise-t-il les références non-Const à se lier à des objets temporaires alors que GCC ne le fait pas ?
Erreur : référence non const liée à un objet temporaire dans Visual Studio
GCC génère une erreur lors de l'affectation d'un objet temporaire à un objet non const référence. Étonnamment, Visual Studio le permet. Pourquoi cet écart ?
L'explication réside dans une ancienne extension de Visual Studio. Comme indiqué dans un rapport de bogue : « Les objets temporaires peuvent être liés à des références non constantes », Visual Studio permet aux objets temporaires d'être liés à des références non constantes, même si cela peut entraîner un comportement non défini.
Ceci le comportement a été controversé. Une réponse au rapport de bug indique qu'il existe un avertissement de niveau 4 pour cette erreur, qui peut être activé avec l'indicateur du compilateur "/W4".
Cependant, il existe un moyen d'en faire une erreur dans Visual Studio : désactivez les extensions de langue avec le flag "/Za". Il s'agit d'une solution de contournement utile si vous souhaitez respecter les normes C strictes et éviter un comportement de code potentiellement problématique.
Pour illustrer, considérons l'exemple suivant :
class Zebra { int x; }; Zebra goo() { Zebra z; return z; } void foo(Zebra &x) { Zebra y; x = y; foo(goo()); // Error in GCC, allowed in Visual Studio }
Dans Visual Studio, ce code compilera sans erreurs. Cependant, dans GCC, cela générera une erreur de compilation en raison de l'affectation de l'objet temporaire à une référence non const.
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!