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
Mary-Kate Olsenoriginal
2024-12-24 09:55:25864parcourir

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());
}

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

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!

Déclaration:
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