C++学习之const

const char*; char const*; char* const三者的区别

在C++中,const有时可谓是一个“小人物”,但这个小人物又常常会让程序员犯错,下面给出一个经常会出现的错误:

有以下两个定义:

 

//定义两个指针变量 const char* p1; char const* p2; char* const p3;

 

可能有人会觉得上面的两个定义是一样的,但却不是这样的,由于上面的定义有些复杂,因此Bjarne在他的《The C++ Programming Language》里面给出过一个助记的方法: 把一个声明从右向左读。

// * 读成 pointer to const char* p1; //p1 is a pointer to const char; 定义(1) char const* p2; //同上,因为C++里面没有const*的运算符,所以const只能属于前面的类型。 char* const p3; //p2 is a const pointer to char 定义(2)

因此显然,定义(1)说的是p1是一个可变的指针,指向一个常字符,因此该定义可以不用初始化

定义(2)说的是p2是一个常指针,指向字符的,因此p2是不可修改的(顺便一提,该定义有问题,需要在定义的时候初始化)

 

从上面的分析中可以看到,const char*和char const*是一样的,但是两者合char* const 是不同的。

你可能感兴趣的:(C++学习之const)