const
const限定符将一个对象转换成一个常量,限定了其值不允许改变。
常变量
int const val=5;//两种方法都可以; const int val1=6;//因为常量在定义后不能改变,所以定义时必须初始化;
任何企图修改val和val1的操作都会引起编译错误;
const引用
const应用是指向const对象的引用
不能将普通的引用绑定到const对象;
const int r=10; const int &r1=r;//不能对r1赋值; int &r2=r;//错误;
const引用可以绑定到不同而相关的类型的对象或右值,非const只能绑定与该引用同类型的对象
const int &r=42;//直接绑定到字面值常量 double a=3.14; const int &r1=a;//注意,此后修改a的值r1并不会改变;
下面的情况也是可行的
int i=10; const int &r=10; const int &r1=r+i;
指向const对象的指针
如果一个指针指向const对象则不允许用指针来改变其所指的值(其实const对象指针一经定义,就不允许用该指针修改其所指对象的值,若其指向的是非const对象,可以通过其他方法修改其所指向的值。)
其定义的形式为
const int *pt;//pt为指向int类型const对象的指针,pt并非const,而其指向的对象为const,因此定义时不用初始化
以下使用错误要避免:
1.可以给指针重新赋值使其指向另一个const,但不能通过指针修改其所指向的值
*pt=10;//错误
2.不能把一个const对象的地址赋给一个普通的非const对象的指针(可以把非const对象的地址赋给指向const对象的指针)
const int a=10; int *b=&a;//错误
3.不能用void*指针保存const对象地址,必须使用const void*
const int a=5; const void *b=&a;//正确; const *c=&a;//错误;
const指针
指针的类型为const,其值不能修改,必须在定义时初始化。
int a=0; int *const pt=&a;//const指针 pt=pt;不能对其赋值即使是自己也不行;
可以使用指针修改其指向的值;
指向const对象的const指针
既不能修改指针指向的值也不能修改指针的指向(即指针中存放的地址值)
const int a=0; const int *const pt=&a;//
下面的问题请注意:
typedef string *pstring中pstring实际上是指向string对象的const指针,而不是指向string类型的const对象的指针。
typedef string * pstring; const pstring str=s;//假设string s="hello"; pstring const str2=s; string *const str3=s;//以上三种定义其实相同!!!
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-12-28 16:18:05