Maison  >  Article  >  développement back-end  >  Pourquoi Visual Studio 2010 autorise-t-il la liaison de référence non-const aux valeurs R ?

Pourquoi Visual Studio 2010 autorise-t-il la liaison de référence non-const aux valeurs R ?

DDD
DDDoriginal
2024-11-01 20:57:02520parcourir

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

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 :

  • GCC émet une erreur de compilation, identifiant correctement la liaison illégale d'une référence non const à une rvalue.
  • Visual Studio 2008 fournit un avertissement de compilation, reconnaissant le problème potentiel mais autorisant la compilation.

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!

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