const string* p和String * const p

来源:百度知道 编辑:UC知道 时间:2024/05/22 23:52:02
如题,它们是一样的吗?
各代表什么意思?

请把要复制粘贴别人的文章,谢谢

事实上这个概念谁都有只是三种声明方式非常相似很容易记混。
Bjarne在他的The C++ Programming Language里面给出过一个助记的方法: 把一个声明从右向左读。
(1)string* const cp; ( * 读成 pointer to )
cp is a const pointer to string

(2)const string* p;
p is a pointer to const string;

(3)stringconst * p;
同上因为C++里面没有const*的运算符,所以const只能属于前面的类型。

定义指针时

const string* p
const 在 * 左边,说明定义的是指向常量的指针
就是说 不允许 通过 p 赋值

String * const p
const 在 * 右边,说明定义的是常指针
就是说 p 不允许 再指向别处

const string* p和String * const p 不一样:
const string *p,是说*p可以改变,但是指向的字符串不能变
string *const p ,是说p不能变,但是string可以变

比如:
char * const p ;
p++ 不可以,因为你改变了P

const char *p;
p++ //可以