我想知道 C++ 中的 const ref 和 const 指针有什么区别。当我声明某个东西是 const ref 时,我可以改变它的价值吗?还是 const 在对象上?因为我知道 const 指针意味着你不能改变 POINTER 但你可以改变它指向的 VALUE。
例如:
const char& a; // ?
const char* a; // pointer is const
弗雷德 const&x;
这意味着 x 为 Fred 对象起别名,但 x 不能用于更改该 Fred 对象。
弗雷德常数* p;
Fred const* p 的意思是“p 指向一个常量 Fred”:Fred 对象不能通过 p 改变。
弗雷德*常数 p;
Fred* const p 的意思是“p 是一个指向 Fred 的 const 指针”:你不能改变指针 p,但是你可以通过 p 改变 Fred 对象。
可以结合最后一个来获得:
弗雷德 const* const p;
Fred const* const p 的意思是“p 是一个指向常量 Fred 的常量指针”:不能改变指针 p 本身,也不能通过 p 改变 Fred 对象。
有关此的更多信息,请访问此链接。
我更喜欢这样写:char const * a
vs. char * const a
。
这使您可以从右向左读取:char const * a
is:a
是指向常量的指针char
,并且char * const a
is:a
是指向 a 的常量指针char
。如果我阅读其他代码,我只记得const char* a = char const* a
.
回答您问题的另一部分:
当我声明某事物为 const ref 时,我可以更改它的 VALUE 吗?
人们误用术语 const ref 实际上表示对常量的引用(因为常量引用没有意义)。因此, const refconst char& a
意味着您无法更改该值。但是,如果您实际上的意思是您想要一个恒定的参考,char& const a
那么您可以更改该值并且该const
部分没有任何区别。
对于指针,const char* a
意味着您不能更改a
指向的值。与此相比,char* const a
这意味着您无法更改指针,但可以更改指向的值a
。
const char* a; // pointer is const
错了,这是一个指向常量的指针。这个:
char* const a; // pointer is const
是一个常量指针。