Maison > développement back-end > C++ > Les objets temporaires peuvent-ils être liés à des références non constantes dans Visual Studio ?

Les objets temporaires peuvent-ils être liés à des références non constantes dans Visual Studio ?

Patricia Arquette
Libérer: 2024-12-24 17:07:19
original
649 Les gens l'ont consulté

Can Temporary Objects Be Bound to Non-Const References in Visual Studio?

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());
}
Copier après la connexion

É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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal