Pourquoi est-ce que je reçois une erreur quand je cours ça? Je m'attendais à ce que PTR_Ref ne soit pas en mesure de modifier l'adresse dans laquelle le PTR souligne, mais que les choses ne semblent pas aller comme prévu. merci d'avance,
15 ans NOOB C ++ NOOB P> P>
3 Réponses :
pTR_Ref code> est déclaré non comme un Const code> référence au pointeur sur int code>, mais plutôt une référence au pointeur sur const int , vous avez donc une inadéquation de type. Vous devriez faire int* const& ptr_ref = ptr;
Merci beaucoup oui, je comprends très bien que le mot-clé 'const' fait partie du type en C ++ mais l'homme Ces déclarations de type peuvent être très gênantes, merci beaucoup monsieur.
Il a déclaré qu'il voulait que l'int d'être const code>. Cela lui permettrait d'être mutable, tout simplement pas le pointeur lui-même.
@WilliamkAppler La question dit "S'attendre à ... être incapable de modifier l'adresse i>", que j'ai interprété comme voulant que le pointeur soit constitué.
Il n'y a pas une telle chose qu'une "référence constante". Le problème est une référence ne peut pas se lier à des types non liés, c'est-à-dire "const int *" et "int * '.
Permettez-moi de le reformuler, je veux que pTR_Ref ne puisse pas modifier PTR.
personne n'a déjà mentionné cela, mais si B code> est censé être non modifiable, alors const int * const & pTR_ref = pTR; code> peut être utilisé
Une référence est intrinsèquement const, donc il n'y a pas vraiment de point dans la définition comme [modifier] édité ma réponse car j'avais placé le const par erreur du mauvais côté de l'ampersand - C ++ ne vous pardonne pas [/ modifier] p> int * & const pTR_ref = pTR code>
Lorsque vous parlez d'une référence de const, cela signifie normalement une référence à un const, qui est la définition que vous avez utilisée dans votre question. P>
Eh bien, Si vous avez une référence non Const à un pointeur, la référence est en mesure de modifier la valeur dans laquelle le pointeur pointe vers ce que j'essayais de faire est de restreindre la référence de la possibilité de le faire.
int * const & pTR_ref code> est une référence à un pointeur de const à int (et il y en a certainement un point à celui-ci). Le const code> s'applique au pointeur et non à la référence. Pour postuler à la référence, ce serait int * & const code>, qui n'est pas la syntaxe légale (probablement parce qu'elle est redondante, car, comme vous l'avez dit, une référence est intrinsèquement constituée).
@Benjaminlindley. int * & Cons code> n'est pas la syntaxe légale car l'identificateur de const ne peut pas être appliqué à une référence (et le compilateur vous le dira). Différent aspect est int * const & code> ce qui signifie une référence à un pointeur de const à la non-const int, qui est légal, et c'est ce que l'OP demande. J'ai reçu un bowvote sur ma réponse probablement parce qu'ils ne le comprenaient pas clairement (ou je ne l'ai pas expliqué correctement)
@ Ad3angel1s: Pourquoi me dis-tu exactement ce que je viens de vous dire? Et le bowvote n'était pas probable parce que quelqu'un ne l'a pas compris, mais parce que c'était faux. Maintenant, vous l'avez corrigé, mais étant donné la correction, je ne suis pas sûr de ce que c'est une réponse à, car ni l'OP ni personne n'a essayé de déclarer quoi que ce soit int * & const code>.
1. Une référence n'est pas intrinsèquement const, 2. int * & const pTR_ref code> est illégal ( const code> ne peut pas y figurer là) - Je ne sais pas pourquoi vous avez écrit que depuis OP n'a pas écrit que 3. OP n'a pas utilisé de référence à un const. Il a utilisé une référence à un pointeur non constitué qui pointe vers Const.
Le problème est que les types ne correspondent pas et que vous ne pouvez donc pas créer de référence. est légal. p> est légal. p> est une inadéquation . p> Le message d'erreur de g ++ peut vous être utile: P> int& added = 3 + 2;
Merci, je vous aurais tenu comme le répondeur de cette question si vous aviez été plus tôt, mais oui INT * CONSTOY & PTR_REF = PTR; B> a résolu mon problème maintenant, je comprends qu'avant ce que je faisais en train de regarder Pour une référence à un const int * mais maintenant je comprends que c'est faux. Merci fourrette beaucoup!
@FunterTain, il est correct de changer une réponse acceptée si une nouvelle réponse aide plus d'une autre. La réponse acceptée est la première qui a été montrée aux futurs visiteurs, donc idéalement, ce serait celui qui est le plus utile en moyenne.
@FunterTain comme je l'ai signalé dans mon autre commentaire, avec int * const & ptr_ref = pTR; code>, l'int-lui-même est toujours mutable. Pour clarifier, je peux faire: * pTR_ref = 4; code> et le compilateur le permettra de manière heureuse. Vous devriez, à mon avis, avoir i> const code> designations. On dirait que vous voulez que la valeur int code> const code>, mais c'est aussi une très mauvaise idée de laisser le pointeur mutable. J'écrirais l'expression const int * consons ptr_ref = pTR; code>. C'est vraiment la référence qui est la partie qui a peu de sens.
... Bien que l'appelant "ptr_ref" alors est une sorte de fou. Encore une fois, cela dépend beaucoup de ce que vous faites réellement.
Pas clair de votre texte, mais avez-vous voulu dire que
ptr_ref code> ne doit pas être capable de modifierptr code> ou ne pas être en mesure de modifierB code>?