const ref和const指针之间的区别,c ++

时间:2012-05-01 17:31:08

标签: c++ pointers reference const

我想知道c ++中const ref和const指针之间的区别是什么。 当我宣布某事为const ref时,我可以改变它的值吗? 或者const继续对象? 因为我知道const指针意味着你不能改变POINTER,但你可以改变它指向的VALUE。

例如:

const char& a; // ?
const char* a; // pointer is const

3 个答案:

答案 0 :(得分:5)

  

Fred const& X;

这意味着x别名为Fred对象,但x不能用于更改Fred对象。

  

Fred const * p;

Fred const * p表示“p指向常量Fred”:Fred对象不能通过p更改。

  

Fred * const p;

Fred * const p表示“p是指向Fred的const指针”:你不能改变指针p,但你可以通过p改变Fred对象。


可以将最后一个组合起来得到:

  

Fred const * const p;

Fred const * const p表示“p是指向常量Fred的常量指针”:你不能改变指针p本身,也不能通过p改变Fred对象。

有关此次访问的更多信息link

答案 1 :(得分:2)

const char* a; // pointer is const

错了,这是一个指向常量的指针。这样:

char* const a; // pointer is const

是一个常量指针。

答案 2 :(得分:2)

我更喜欢这样写:char const * achar * const a

这允许您从右向左阅读:char const * a是:a是指向常量char的指针,char * const a是:achar的常量指针。如果我读了其他代码,我只记得const char* a = char const* a

回答问题的其他部分: 当我声明某些东西是const ref时,我能改变它的值吗? 人们滥用术语const ref实际上意味着对常量的引用(因为常量引用没有意义)。因此,const ref const char& a表示您无法更改该值。但是如果你真的想要一个恒定的引用char& const a,那么你可以更改值,而const部分没有任何区别。

对于指针,const char* a表示您无法将值a更改为。将其与char* const a进行比较,这意味着您无法更改指针,但您可以将值a更改为。