J'ai le code suivant
string three() { return "three"; } void mutate(string& ref) { } int main() { mutate(three()); return 0; }
5 Réponses :
It ne compile pas em>, avec g ++ 4 au moins: (les numéros de ligne sont éteints par 3 ou 4, car je devais ajouter le #include et 'utiliser' lignes.) p> Donc, votre compilateur semble ne pas être aussi strict que cela devrait être. P> P>
Publier édité et compilateurs ajoutés que j'utilise.
Je suppose que cela dépend du compilateur. G ++ 4.1.2 me donne ceci. Peut-être parce que vous ne faites rien, l'appel est optimisé. P> P>
J'ai essayé de faire quelque chose avec le paramètre refer à l'intérieur de la méthode mutée () et il compile toujours
Je l'ai essayé en VC ++, juste maintenant et cela compile et travaille à moins que vous ne désactivez les extensions dans les propriétés du projet. Lorsque vous obtenez-vous, vous obtenez ceci: 1> Main.cpp 1> D: \ Tous \ Projects \ Laptop \ 2 \ asd \ asd \ MAIN.CPP (16): Erreur C2664: 'Mutate': impossible de convertir le paramètre 1 de 'std :: string 'to' std :: string & '1> une référence non-consons ne peut être liée qu'à un lvalue
Il utilisait pour compiler dans le compilateur VC6, donc je suppose que la comptibilité rétro-retour VS2008 prend en charge cette extension non standard. Essayez avec / za (Désactiver l'extension de langue) Drapeau , vous devriez obtenir une erreur alors. P>
L'option Spécification / za code> pourrait entraîner des problèmes avec lesquels
windows.h code> ou d'autres en-têtes spécifiques Windows.
En utilisant le niveau d'avertissement comme quatre est une meilleure option qui est ce que j'ai utilisé
Ceci est une extension Microsoft, pour imiter le comportement de nombreux autres compilateurs Microsoft. Si vous activez des avertissements W4, vous verrez l'avertissement. P>
Il s'agit d'une extension diabolique VC ++. Si vous êtes oomple avec / w4, alors le compilateur vous avertira. Je suppose que vous lisez le Revalue Références: C ++ 0x Caractéristiques en VC10, Partie 2 . Cet article avait également mentionné ce problème. P>
Essayez GCC, il est plus proche de la norme C ++.
Malheureusement, je n'ai pas de GCC avec moi.
@Appu: Après avoir corrigé votre code pour un inclus manquant et
std code> Préfixes, Comeau ( COMEAUCOMPUTATION .com / Tryitout ) dit:
La valeur initiale de la référence à la non-const doit être une lvalue code>. La raison pour laquelle VC accepte cela est que VC est cassé. (Ils l'appellent une "fonctionnalité", mais c'est en fait un bug.)