Maison > développement back-end > C++ > le corps du texte

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

Barbara Streisand
Libérer: 2024-10-28 10:05:29
original
150 Les gens l'ont consulté

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

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!