我想知道c ++中const ref和const指针之间的区别是什么。 当我宣布某事为const ref时,我可以改变它的值吗? 或者const继续对象? 因为我知道const指针意味着你不能改变POINTER,但你可以改变它指向的VALUE。
例如:
const char& a; // ?
const char* a; // pointer is const
答案 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 * a
与char * const a
。
这允许您从右向左阅读:char const * a
是:a
是指向常量char
的指针,char * const a
是:a
是char
的常量指针。如果我读了其他代码,我只记得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
更改为。