Maison  >  Article  >  développement back-end  >  Pourquoi Visual Studio 2010 autorise-t-il la liaison de références non constantes à des valeurs R ?

Pourquoi Visual Studio 2010 autorise-t-il la liaison de références non constantes à des valeurs R ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-28 10:05:29151parcourir

Why Does Visual Studio 2010 Allow Binding Non-Const References to Rvalues?

Visual Studio 2010 : autoriser la liaison d'une référence non constante à Rvalue

Problème :

Dans l'extrait de code suivant, le compilateur Visual Studio 2010 (SP1) se compile avec succès sans aucune erreur ni avertissement, même s'il semble s'agir d'une initialisation non valide d'une référence non const à une rvalue temporaire :

<code class="cpp">string foo() { return "hello"; }
int main()
{
    string& tem = foo(); // Should be illegal
}</code>

Comportement attendu :

Selon la norme C, lier une référence non const à une rvalue doit être considérée comme une erreur ou un avertissement. En effet, les références non const ne doivent être liées qu'à des lvalues ​​(objets avec une adresse permanente).

Comportement VS2010 :

Cependant, les compilateurs Visual Studio 2010 ont historiquement permis cette pratique comme une extension de la langue. Ce comportement n'est pas conforme à la norme C et est généralement considéré comme un bug.

Raison :

La raison de ce comportement n'est pas tout à fait claire, mais elle est On pense que cela est lié au fait que les compilateurs Visual Studio ont toujours été plus indulgents en termes de vérification des erreurs et d'avertissements. Ce laxisme peut avoir été introduit intentionnellement pour permettre une plus grande flexibilité dans l'écriture du code, bien qu'il ne respecte pas la norme C.

Implications :

Ce comportement peut avoir des implications pour la sécurité et les performances du code. Lier une référence non const à une rvalue peut conduire à des résultats inattendus, car la rvalue peut être modifiée ou détruite à tout moment.

Solution :

La solution recommandée est d'éviter de lier des références non const à des rvalues. Au lieu de cela, utilisez soit une référence const (qui peut se lier à la fois aux lvalues ​​et aux rvalues) ou à un pointeur.

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