Objets temporaires liés à des références non const dans Visual Studio
La question de savoir si les objets temporaires peuvent être liés à des références non const a été résolue. fait l'objet de débats parmi les programmeurs, notamment dans le contexte de Visual Studio. La question se pose lorsque le code se compile dans Visual Studio mais génère des erreurs dans d'autres compilateurs, comme gcc.
Pour comprendre le problème, considérons le code suivant :
class Zebra { int x; }; Zebra goo() { Zebra z; return z; } void foo(Zebra &x) { Zebra y; x = y; foo(goo()); }
Étonnamment, Visual Studio permet ce code pour compiler sans erreurs. Cependant, gcc le traite comme une erreur de compilation. Cette divergence soulève la question de la validité de la liaison d'objets temporaires à des références non const.
Pour résoudre ce problème, il est important de noter que Microsoft a introduit une extension dans son compilateur, qui permet la liaison d'objets temporaires à références non constantes. Ce comportement est contraire à la norme C, qui interdit de telles liaisons.
Le rapport de bug de Microsoft « Les objets temporaires peuvent être liés à des références non-const » fournit un aperçu plus approfondi de ce comportement. Il indique que cette extension est une exception au standard, activée par défaut dans Visual Studio.
Cependant, le rapport de bug suggère également que l'utilisation de l'option du compilateur "/Za", qui désactive les extensions de langage, peut provoquer le code pour échouer à la compilation, suivant le standard C. Cela indique que le comportement de Visual Studio dans ce cas est un écart délibéré par rapport à la norme.
Ainsi, bien que Visual Studio permette la liaison d'objets temporaires à des références non const, il s'agit d'une extension qui s'écarte de la norme C. . Les compilateurs qui adhèrent strictement à la norme généreront des erreurs lorsqu'ils rencontreront un tel code. Il est recommandé de faire preuve de prudence lors de l'utilisation de cette extension, car elle peut entraîner un comportement inattendu ou des problèmes de portabilité.
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!