Maison > développement back-end > C++ > Pourquoi Visual Studio autorise-t-il la liaison de référence non constante aux fichiers temporaires ?

Pourquoi Visual Studio autorise-t-il la liaison de référence non constante aux fichiers temporaires ?

Mary-Kate Olsen
Libérer: 2024-12-24 09:55:25
original
863 Les gens l'ont consulté

Why Does Visual Studio Allow Non-Const Reference Binding to Temporaries?

Cas curieux de Visual Studio de liaison de références non-const à des objets temporaires

Le comportement de Visual Studio concernant la liaison de références non-const à des objets temporaires a augmenté fait sourciller certains programmeurs en raison de sa nature apparemment contradictoire. Pour comprendre le contexte, considérez l'extrait de 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 de se compiler tandis que gcc l'identifie comme une erreur. Ce phénomène a amené beaucoup de personnes à s'interroger sur la justification de l'approche de Visual Studio.

En y regardant de plus près, il s'avère que Visual Studio utilise une extension de langage plus ancienne. Un rapport de bogue de Microsoft met en lumière ce problème, en soulignant que Visual Studio permet de lier des objets temporaires à des références non const. Ce comportement peut cependant être corrigé en utilisant l'option du compilateur /Za, qui désactive les extensions de langage.

Pour illustrer davantage cette extension, considérez le code suivant :

struct A {};

A     f1();
void f2(A&);

int main()
{
    f2(f1()); // This line triggers an error with `/Za` enabled
}
Copier après la connexion

Comme solution de contournement , Visual Studio prend en charge un avertissement de niveau 4 dans de tels cas, qui peut être activé en spécifiant /W4 lors de la compilation. Cependant, il convient de noter que cette approche permet toujours au code de se compiler, mettant en évidence la flexibilité de l'extension de Visual Studio.

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