const关键字

来源:互联网 发布:猪八戒软件开发 编辑:程序博客网 时间:2024/06/06 16:13

1.const常量在定义的时候必须初始化;

const对象默认的是文件的局部变量,只存在该文件内部,不能被其他文件访问。(使用extern 可以使整个程序访问const 对象);

2.const和引用

const引用是指向const对象的引用:

const int  ival =1024;const int &refval= ival;   //okint &rev =ival; <span style="white-space:pre"></span> //error
const引用可以可以绑定到不同但相关的类型的对象或者绑定到右值;(非const引用只能绑定到同类型的对象)

int i = 12;const int ref =12;const int ref2 = ref +i;
同样的初始化对于非const引用是不合法的。

3.const和指针

(a)指向const对象的指针

如果指针指向一个const对象,C++强制要求只想const对象的指针也必须具有const特性(为了保证不允许使用指针改变所指的const值):

const int ival = 42;const int *ipt = &ival;
const限定了ipt指针所指向的对象类型,而不是ipt本身,也就是ipt不是const,因此定义是不需要初始化,并且可以指向另一个const对象;

*ipt =12;//错误,不能修改所指对象的值
把一个const对象赋值给一个非const指针会导致编译出错;

不能使用void*保存const对象的地址,应该使用const void*类型的指针;

可以把非const对象地址赋值给指向const对象的指针,但这样就不能通过该指针修改对象的值

int val = 5;ipt = &val; //ok*ipt = 12; //error
这时通过其他途径修改val的值之后,*ipt的值也会改变。

(b)const指针

const指针定义的时候需要初始化,并且const指针的值不能修改,即cosnt指针不能再指向其他的对象:

int val = 0;int *const refval = &val; //refval 是const指针refval=refval;  //refval不能再指向其他对象,即使是本身赋值给本身
const指针可以修改指向对象的值:

*refval=12; //ok
(c)指向const对象的const指针

const int pi =10;const int *const pt =&pi;
不能修改pt所指向对象的值,也不能修改pt的指向。

4.const成员函数

定义:在函数形参列表后面加上const,函数体内不能修改数据,只能访问数据;

(a).const成员函数不能修改类对象的数据成员,可以访问非const对象和const对象的数据成员;

(b).非const成员函数只能访问非const对象的数据成员,不能访问const对象;

(c).const对象只能调用const成员函数,非const对象也可以调用const成员函数;

(d).const成员函数可以被具有相同返回值和形参列表的非const函数重载:

int fun(int a,int b) const;int fun(int a,int b);
这时对象的const属性决定具体调用哪个函数

(e).const成员函数不能调用非const成员函数.



0 0