为常量指针创建别名

时间:2015-05-26 19:23:34

标签: c++

我想知道为什么最后一个陈述无效?我对错误的信息有点困惑,如果有人能澄清错误,我会很感激。我知道以下代码什么都不做。我只是试图改进我的概念。我想为指针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创建别名。

3 个答案:

答案 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的指针,这是我的第二行。