学习C++的过程中,发现const出现的地方实在是太多了,让我一时感觉:”怎么哪都有你啊!“呵呵,const对于程序员而言就像一个定身符,用来约束那些常量,函数,文件,以及类中的成员。下面对const出现的不同位置做个总结。
1.const 定义变量常量
const int bufsize = 512;
const 变量必须在定义的时候就初始化,如果
const int bufsize; bufsize = 512;
这是不允许的。
2.const 引用
大家有理解两个概念:引用其实就对象的另一个名字,const 引用其实就是指向const对象的引用(这不是废话.....)
如const double dval = 3.1415;
const double &temp = dval; //ok
int &temp1 = dval; //error
当dval为non-const类项的时候 ,既double dval = 3.1415;对它的const 引用其实没什么意义,因为尽管temp不能更改,但dval还 是可 以更改,如果dval = 5;那么temp 也会变成5.
但这种情景会有个例外,如:
double dval = 3.1415;
const int &temp = dval;
dval = 4;
大家猜一下现在temp变成几了,是3还是4呢?
这里面涉及到类项的转化,过程是这样的:
当执行到const int &temp = dval时,会先有个中间变量 int t = dval ; 然后const int &temp = t; 这个dval没有想到中间居然插 出个小三....于是乎temp和它再无任何瓜葛,最后temp的值是3
3.const 指针
相信大家对这个都非常的熟悉,简而言之:谁离const 近,它就绑谁。
const double *ptr = &dval; //double 离它比较近,所以ptr可以去指向别的变量,而dval则不能变
double* const ptr = &dval; //与上整好相反
4.const 成员函数
class TextBlock {
public:
const char& operator[](size_t position) const
private:
mutable int length;
};
const成员函数就是为了确认该成员函数可作用与const对象上面,同时它也反映了class的接口,既哪些会改变对象内容,哪些不会。在const 成员函数中并非说里面的对象肯定就不会修改,一个可以从外部定义一个指针指向它的内容,然后通过指针更改它,另一个就是显示的通过关键字mutable(可变的)来释放掉对变量的约束,如length,如果一个成员函数中使用了length,这个变量在函数中是可更改的。
const 的使用还有很多细节,在此就不一一罗列了,C++Primer里面讲的很详细,由于笔者能力有限,不足之处还请指出来,以后我会陆续的将C++的总结写出来,大家一起学习。