我想知道为什么最后一个陈述无效?我对错误的信息有点困惑,如果有人能澄清错误,我会很感激。我知道以下代码什么都不做。我只是试图改进我的概念。我想为指针p
创建一个别名
int a =12;
int * const p = &a; //p is a constant pointer to an int - This means it can change the contents of an int but the address pointed by p will remain constant and cannot change.
int *& const m = p; //m is a constant reference to a pointer of int type <---ERROR
这些是我得到的错误
main.cpp:17:18: error: 'const' qualifiers cannot be applied to 'int*&'
int *& const m = p;
^
main.cpp:17:22: error: binding 'int* const' to reference of type 'int*&' discards qualifiers
int *& const m = p;
任何人都可以解释这两个错误特别是最后一个错误,以及是否可以为指针p创建别名。
答案 0 :(得分:5)
'const' qualifiers cannot be applied to 'int*&'
初始化后,引用无法重新绑定。所以没有理由在引用上放置const限定符(不要与const-to-const混淆,这是完全正常的),因为它无论如何都无法改变。这是第一次错误的原因。
对于第二个错误,
binding 'int* const' to reference of type 'int*&' discards qualifiers
p
是一个const指针,但您正在尝试将引用绑定到非const。这将允许您通过引用更改const指针,这是不允许的。
以下是引用p
的正确方法:
int * const& m = p;
答案 1 :(得分:3)
使用
int a =12;
int* const p = &a;
int* const& m = p;
它将m
定义为对const
的{{1}}指针的引用。
答案 2 :(得分:0)
请考虑以下两行:
int *const & const m = p; //m is a constant reference to a pointer of int type <---ERROR
int *const & m = p; //m is a reference to a pointer to a const int type <--- OK
您的评论给出了答案。在您的代码中,您定义了一个对指针的常量引用,这是没有意义的。你需要一个指向const的指针,这是我的第二行。