"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-04
Parcourir:843

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 :

string foo() { return "hello"; }
int main() {
    string& tem = foo(); // Non-const reference to rvalue
}

Différences de comportement du compilateur

À l'opposé, d'autres compilateurs présentent un comportement plus strict :

  • GCC émet une erreur de compilation, identifiant correctement le liaison d'une référence non const à une rvalue.
  • Visual Studio 2008 fournit un avertissement de compilation, reconnaissant le problème potentiel mais permettant 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 valeur r 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 s'appuie sur 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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3