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 ?

Pourquoi Visual Studio autorise-t-il les références non-Const à se lier à des objets temporaires alors que GCC ne le fait pas ?

Patricia Arquette
Libérer: 2024-12-22 19:58:10
original
836 Les gens l'ont consulté

Why Does Visual Studio Allow Non-Const References to Bind to Temporary Objects While GCC Doesn't?

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

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!

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