Maison >développement back-end >C++ >Pourquoi Visual Studio compile-t-il des références non constantes aux fichiers temporaires alors que d'autres compilateurs ne le font pas ?

Pourquoi Visual Studio compile-t-il des références non constantes aux fichiers temporaires alors que d'autres compilateurs ne le font pas ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-25 20:24:13181parcourir

Why Does Visual Studio Compile Non-Constant References to Temporaries While Other Compilers Don't?

Référence non constante liée à une référence temporaire : anomalie de Visual Studio

Ce problème survient lors de la compilation de code qui tente de lier une référence non constante à un objet temporaire. Bien que Visual Studio autorise la compilation d'un tel code, d'autres compilateurs, comme gcc, l'identifient comme une erreur de compilation.

Explication

Dans l'exemple fourni :

class Zebra {int x;};
Zebra goo() {Zebra z; return z;}
void foo(Zebra &x)
{
    Zebra y;
    x = y;
    foo(goo());
}

Le code tente de lier une référence non constante (Zebra &x) à un objet temporaire renvoyé par la fonction goo(). Selon la norme C, cela devrait entraîner une erreur de compilation.

Extension de Visual Studio

Cependant, Visual Studio possède une ancienne extension qui permet ce comportement. Cette extension traite essentiellement les références à des objets temporaires comme s'il s'agissait de références à des objets non temporaires.

Cette extension a été introduite pour prendre en charge les bases de code existantes. Cependant, cela peut conduire à un comportement inattendu et n'est généralement pas recommandé.

Approche recommandée

Pour éviter ces anomalies, il est préférable de désactiver l'extension à l'aide du /Za indicateur du compilateur. Cela garantira que le code adhère à la norme C et sera traité de manière cohérente par différents compilateurs.

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