Visual Studio 2010 : autoriser la liaison d'une référence non constante à Rvalue
Problème :
Dans l'extrait de code suivant, le compilateur Visual Studio 2010 (SP1) se compile avec succès sans aucune erreur ni avertissement, même s'il semble s'agir d'une initialisation non valide d'une référence non const à une rvalue temporaire :
<code class="cpp">string foo() { return "hello"; } int main() { string& tem = foo(); // Should be illegal }</code>
Comportement attendu :
Selon la norme C, lier une référence non const à une rvalue doit être considérée comme une erreur ou un avertissement. En effet, les références non const ne doivent être liées qu'à des lvalues (objets avec une adresse permanente).
Comportement VS2010 :
Cependant, les compilateurs Visual Studio 2010 ont historiquement permis cette pratique comme une extension de la langue. Ce comportement n'est pas conforme à la norme C et est généralement considéré comme un bug.
Raison :
La raison de ce comportement n'est pas tout à fait claire, mais elle est On pense que cela est lié au fait que les compilateurs Visual Studio ont toujours été plus indulgents en termes de vérification des erreurs et d'avertissements. Ce laxisme peut avoir été introduit intentionnellement pour permettre une plus grande flexibilité dans l'écriture du code, bien qu'il ne respecte pas la norme C.
Implications :
Ce comportement peut avoir des implications pour la sécurité et les performances du code. Lier une référence non const à une rvalue peut conduire à des résultats inattendus, car la rvalue peut être modifiée ou détruite à tout moment.
Solution :
La solution recommandée est d'éviter de lier des références non const à des rvalues. Au lieu de cela, utilisez soit une référence const (qui peut se lier à la fois aux lvalues et aux rvalues) ou à un pointeur.
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!