在c/c++语言中,const用于声明一个常量,比如下面的声明:
const int a = 10
这个语句定义了一个常量a,值为10,由于加上了const修饰,因此 a 在它的生命周期里无法别修改,如果修改,在编译的时候就会报错。
上面的语句很好理解,但是是否能够正确的理解下面的语句呢?
第1个:
char * pstr = "hello";
第2个:
const char * pstr = "hello";
第3个:
char* const pstr = "hello";
第4个:
const char* const pstr = "hello";
解答:
第1个:pstr是一个指向个常量字符串的指针。在c/c++中,"hello"这个字符串的字面值是一个“const char”类型,即常量,不能修改。
下面的代码编译器就会报错:
char * pstr = "hello";
*pstr = “something"
第2个:与第1个一样,只是在指针设声明前加上了const,更能清楚地表达指针指向的内容不可修改,主意:但该指针所执行的对象可以更改! 如:
错误:
const char * pstr = "hello";
*pstr = "some";
正确:pstr和pstrB都指向了“some”这个常量
const char * pstr = "hello";
const char * pstrB = "some";
pstr = pstrB;
第3个:什么了一个常量指针,意思是该指针所指向的对象不能改变,但对象的内容可以改变! 如:
错误:
char a[] = "hello";
char * const pstr = a;
char b[] = "some";
pstr = b;
正确:pstr和pstrB都指向了“some”这个常量
char a[] = "hello";
char * const pstr = a;
a[0] = 'c'
此时pstr指向的对象:字符数组a[]的内容由hello变成cello
第4个:申明了一个指向一个常量字符串的常量指针。意思是指针所指向的对象不能改变,对象的内容也不能改变!
错误:
const char a[] = "hello";
const char * const pstr = a;
a[0] = 'c'; //错误
pstr = b; //错误
总结:
指向常量对象的指针:指向的对象的内容不可改变
指向对象的常量指针:指针指向的对象(即指针保持的地址)不可改变,对象的内容可以改变
指向常量对象的常量指针:指针指向的对象和对象的内容都不可以改变
补充:
const也可以用在类定义中的方法的限定,如下面的类定义:
class Persion
{
public:
int age;
char* name;
...
void sya() const;
....
}
表示在该函数内部不能修改调用该方法的Persion对象的属性(如age),下面的实现将会报错:
void Persion::say() const
{
this->age = 10; //错误,不能修改类的属性值
cout<<"........\n";
}
当我们设计类的函数时,如果不需要改变类的属性值,最好加上const,避免设计中出现修改属性的代码,从而在编译阶段就可以找出错误地方。
阅读(700) | 评论(0) | 转发(0) |