2

我想知道 C++ 中的 const ref 和 const 指针有什么区别。当我声明某个东西是 const ref 时,我可以改变它的价值吗?还是 const 在对象上?因为我知道 const 指针意味着你不能改变 POINTER 但你可以改变它指向的 VALUE。

例如:

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

3 回答 3

5

弗雷德 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 对象。

有关此的更多信息,请访问此链接

于 2012-05-01T17:41:02.313 回答
2

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

这使您可以从右向左读取:char const * ais:a是指向常量的指针char,并且char * const ais: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

于 2012-05-01T17:38:47.890 回答
2

const char* a; // pointer is const

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

char* const a; // pointer is const

是一个常量指针。

于 2012-05-01T17:35:13.930 回答