[导入]const限制符
1. const变量:const type v; 必须定义时初始化,不能修改其值。备注:关于const变量的作用域要特别注意,它是局部的,而默认的C++变量是全局的。通过加extern限制可以令const对象可以在全局被访问。如代码:(顺便提一下static)
file1.cpp type v1;
const type v2; //now,v2 is a local variable.
extern const type v3;//now,v3 is a global variable. must add 'extern'~.
file2.cpp type v1; // error.redeclaration.
extern type v1; //ok.
type v2; //ok.but not equivalent to v2 in file1.cpp
const type v3; // ok.but not equivalent to v3 in file1.cpp
extern const type v3; //ok.equal to v3 in file1.cpp.
2. const引用:const type& v;是指向const对象的引用。非const引用只能绑定到与该引用同类型的对象。而const引用则可以绑定到不同但相关的类型那个的对象和右值。
double dv = 1.0; const int &iv = dv; 编译时等价于
int temp = dv; const int &iv = temp; //可以看出对iv的修改并不会影响dv的值
3.const与指针:(1) 指向const对象的指针: const type* v; 有时记作type const* v;可以修改指针,但不能直接通过该指针修改指针指向的对象。(可以通过定义非const指针指向该对象,从而修改其值)(2)const指针: type *const v;可以修改指针指向的对象,但不能修改指针本身。(3)指向const对象的const指针:const type *const v; (备注:typedef string * name; const name v; //v的类型是指向string类型的const指针。)
4.const与一般函数: (1) const type1 func(type2 v); 函数返回值为const; (2) type1 func(const type2 v);形参为const变量。因为形参不是引用,不修改实参的值,所以此时的const不起特别的作用;(3)type1 func(const type& v);形参为const引用,不修改传递到形参的实参值。 指针时相同,不修改指针指向的对象的值。
5.const与类成员函数(常量成员函数):type func(type v) const;等价于type func(const *this,type v) const; 它是值this指针是指向const对象的指针,这个函数不改变调用该函数的对象。(备注:事实上是不可以显示使用this指针作为形参的,但可以在函数体中显示地使用this指针。)
6.const与迭代器:vector<type>::const_iterator it; const vector<type>::iterator iter;it指向的元素不能修改,iter指向的元素可以修改,但迭代器本身不能修改。
7.const与容器: const vector<type> vec; 需要注意此时定义的容器迭代器必须是const_iterator型。
文章来源:http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!243.entry