const
const作用
1) 可以定义const常量 const int max = 100
2) 对传入的参数进行类型检查,不匹配进行提示 void f(const int i) { .........}
3) 可以保护被修饰的东西 void f(const int i) { i=10;//error! }
4) 可以很方便地进行参数的调整和修改
5) 为函数重载提供了一个参考
void f(int i) {......} //一个函数
void f(int i) const {......} //上一个函数的重载
6) 可以节省空间,避免不必要的内存分配
7) 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高
const使用
1) 定义常量
2) 指针使用const
3) 函数中使用const
const修饰参数
a.传递过来的参数在函数内不可以改变 void function(const int var)
b.参数指针所指向内容为常量不可变 void function(const char* var)
c.参数指针本身为常量不可变 void function(char* const var)
d.参数为引用,为了增加效率同时防止修改 void function(const class & var)
const修饰返回值
4) 类相关const
a. const修饰类的成员常量,不能被修改,同时它只能在初始化列表中赋值。
class A { const int nValue; //成员常量不能被修改 A(int x): nValue(x) { } ; //只能在初始化列表中赋值 }
b. const修饰类的成员函数,则该成员函数不能修改类中任何非const成员函数,也不能调用类中任何非const成员函数,一般写在函数的最后来修饰。
1) const成员函数不被允许修改它所在对象的任何一个数据成员。
2) const成员函数能够访问对象的const成员,而其他成员函数不可以。
class A { void function()const; //常成员函数, 它不改变对象的成员变量. //也不能调用类中任何非const成员函数。 }
c. 修饰类对象/对象指针/引用
1) const修饰类对象表示该对象为常量对象,其中的任何成员都不能被修改。对于对象指针和对象引用也是一样。
2) const修饰的对象,该对象的任何非const成员函数都不能被调用,因为任何非const成员函数会有修改成员变量的企图。
class AAA { void func1(); void func2() const; } const AAA aObj; aObj.func1(); × aObj.func2(); 正确 const AAA* aObj = new AAA(); aObj-> func1(); × aObj-> func2(); 正确