1.const 定义一个常量,常量在定义之后就不可以在修改,任何修改的尝试都会引起编译错误,所以在定义的时候必须初始化。
const int nTemp = 9;
2.在全局作用域声明的const变量是定义该对象的文件的局部变量,只存在于那个文件中,不能被其他文件访问;
通过指定const变量为extern,就可以在整个程序中访问const对象。
file_1.cc
extern const int bufsize = 10;
file_2.cc
extern const int bufsize;
for(int index = 0; index <= bufsize; index++);
3.非const变量默认为extern。
4.const引用,指向const对象的引用;
为了阻止const对象被修改,将普通的引用绑定到const对象是不合法的;
const int i = 42;int &r = i;不合法的。
5.const引用可以初始化为不同类型的对象或者右值,如:int i = 42; const int &r = 42;const int &r2 = 42 + i;
6.const用在成员函数的形参表之后,可以将成员函数声明为常量,const必须出现在声明和定义中,否则会出现编译错误;
double avg_price()const;
7.const重载
成员函数是否为const,也可以形成重载。
对于函数值传递的情况,因为参数传递是通过复制实参创建一个临时变量传递进函数的,函数内只能改变临时变量,但无法改变实参。则这个时候无论加不加const对实参不会产生任何影响。但是在引用或指针传递函数调用中,因为传进去的是一个引用或指针,这样函数内部可以改变引用或指针所指向的变量,这时const 才是实实在在地保护了实参所指向的变量。因为在编译阶段编译器对调用函数的选择是根据实参进行的,所以,只有引用传递和指针传递可以用是否加const来重载。
8. const成员函数可以改变mutable成员
1 class Screen{ 2 public : 3 do_display(std::ostream& os) const; 4 private: 5 mutable size_t access_ctr; 6 // 7 }; 8 Screen ::do_display(std::ostream& os) const 9 { 10 size_t++; 11 access_ctr++; 12 }