Autoriser la liaison de référence non const à Rvalue : une anomalie VS2010
La norme C interdit strictement la liaison de références non const à des rvalues. Cependant, dans une anomalie particulière, Visual Studio 2010 (SP1) compile le code suivant sans aucune erreur ni avertissement :
<code class="cpp">string foo() { return "hello"; } int main() { string& tem = foo(); // Non-const reference to rvalue }</code>
Différences de comportement du compilateur
À l'opposé, d'autres les compilateurs présentent un comportement plus strict :
Explication de l'anomalie VS2010
Ce comportement inhabituel dans VS2010 provient d'une extension connue du compilateur. Contrairement à GCC et Visual Studio 2008, VS2010 permet aux références non const d'être liées à des rvalues dans certains cas, par exemple lorsque la rvalue est générée par une fonction renvoyant un objet temporaire.
Bien que cette extension défie la norme, il a probablement été mis en œuvre par commodité. Cependant, cela peut conduire à un comportement indéfini si la rvalue est modifiée après que la référence soit liée.
Conséquences et recommandations
Cette extension peut introduire des bugs subtils dans le code qui repose sur le bon respect de la norme C. Par conséquent, il est fortement recommandé d'éviter de lier des références non const à des rvalues, même dans VS2010. Au lieu de cela, utilisez toujours des références const lors de la liaison à des rvalues, comme prévu par la norme.
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!