Maison > Article > développement back-end > Pourquoi VS2010 permet-il de lier des références non const à des valeurs R ?
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>
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 :
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!