在C ++中这两种const用法有什么区别?

时间:2010-06-13 20:35:32

标签: c++

  

可能重复:
  what is the difference between const int*, const int * const, int const *

之间有什么区别
A const * pa2 = pa1;

A * const pa2 = pa1;

(例如我有一些A类)。

3 个答案:

答案 0 :(得分:3)

从右到左阅读类型:

A const * pa2 = pa1;

pa2是一个指向只读A的指针(该对象可能无法通过指针进行更改)

A * const pa2 = pa1;

pa2是指向A的只读指针(指针可能不会更改)

这并不意味着A不能改变(或实际上是常数)const会产生误导,因此总是将其理解为只读。其他别名指针可能会修改A。

答案 1 :(得分:3)

A const * pa2

这是指向const A的非常量指针。您可以更改指针指向的位置,但不能更改指针指向的对象。

A * const pa2

这是一个指向非const A的const指针。你不能改变指针指向的位置,但你可以改变指针所指向的对象。

A const * const pa2

这是指向const A的const指针。您无法更改指针指向的位置,也无法更改指针指向的对象。

在尝试使用C和C ++解密声明时,您可能会发现"Clockwise/Spiral Rule"很有用。

答案 2 :(得分:0)

这意味着第一个是指向const对象的指针,(松散地)表示对象无法更改。

第二个是指向对象的const指针,这意味着指针本身不能被更改(即分配给不同的对象)。