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

Pourquoi VS2010 permet-il de lier des références non const à des valeurs R ?

DDD
Libérer: 2024-10-28 03:22:31
original
548 Les gens l'ont consulté

Why Does VS2010 Allow Non-Const References to be Bound to Rvalues?

Liaison de référence non const à Rvalue : une anomalie VS2010

En C , la liaison d'une référence non const à une rvalue est généralement considérée une erreur. Cependant, dans Visual Studio 2010, le code suivant se compile sans aucune erreur ni avertissement :

<code class="cpp">string foo() { return "hello"; }
int main() 
{
    //below should be illegal for binding a non-const (lvalue) reference to a rvalue
    string& tem  = foo();   

    //below should be the correct one as only const reference can be bind to rvalue(most important const)
    const string& constTem = foo();   
}</code>
Copier après la connexion

Ce comportement est incohérent avec d'autres compilateurs comme GCC et VS2008, qui génèrent des erreurs de compilation ou des avertissements pour un tel code. Cette divergence a soulevé des questions quant à savoir s'il s'agit d'un bug dans VS2010.

Explication

Le comportement de VS2010 dans ce cas est attribué à une extension connue dans les compilateurs VS . Historiquement, ces compilateurs ont permis que des références non const soient liées à des rvalues ​​sans qualification explicite de const. Ce comportement a été introduit pour faciliter la tâche des programmeurs et n'est pas considéré comme une fonctionnalité standard du C.

Dans l'exemple de code, l'absence d'erreurs ou d'avertissements dans VS2010 peut être expliquée comme suit :

  • Le compilateur reconnaît la valeur de retour de foo() comme une valeur r.
  • Il interprète la déclaration string& tem comme une référence non const à une chaîne.
  • Cependant, en raison de la extension dans les compilateurs VS, elle permet à la référence d'être liée à la rvalue renvoyée par foo().

Conclusion

Le comportement de VS2010 en autorisant les références non const à lier à des rvalues ​​sans erreurs ni avertissements ne sont pas la norme C et sont considérées comme une extension. Bien que cela puisse être utile dans certains cas, cela peut également conduire à un comportement inattendu et est généralement déconseillé en faveur de l'utilisation de références const pour la liaison aux rvalues.

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
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!