- 修饰变量,变量只读不可修改,定义时必须初始化;
- 修饰函数形参,函数内部不可改变形参的值;
- 类中使用const
- const修饰成员变量,表示成员变量不能被修改,同时只能在初始化列 表中赋值
- const修饰成员函数:
1、该函数不能改变对象的成员变量
2、不能调用非const成员函数,因为任何非const成员函数会有修改成员变量的企图
3、const的成员函数只能被一个const类对象调用。即const类对象只能调用const成员函数
4、const关键字不能与static关键字同时使用,因为static关键字修饰静态成员函数,静态成员函数不含有this指针,即不能实例化,const成员函数必须具体到某一实例。 - const修饰类对象
1、对象的任何成员都不能被修改
2、只能调用const成员函数
1、编译器可以对const进行类型安全检查
const int x="aaaaaaaa";//编译不通过 #define Y "aaa" //无类型检查
2、可以节省空间,避免不必要的内存分配,因为编译器通常不为const常量分配内存空间,而是将它保存在符号表
注意事项1、修饰变量必须初始化,即定义时必须初始化
const int a;//错误。必须初始化 const myClass * ts;//错误,必须new const int b = 0;
2、类的构造函数不能用const修饰,因为const无法修改成员变量
3、静态成员函数不行。tatic静态成员是属于类的,而不属于某个具体的对象,所有的对象共用static成员。this指针是某个具体对象的地址,因此static成员函数没有this指针。而函数中的const其实就是用来修饰this指针的,意味this指向的内容不可变,所以const不能用来修饰static成员函数
4、以下情况可以修改类的成员变量
#includeusing namespace std; class B { public: B() { } public: int m_iNum=0; }; void foo() { const B b1; // 可以做如下转换,体现出转换为指针类型 B* b2 = const_cast(&b1); // 或者左侧也可以用引用类型,如果对b2或b3的数据成员做改变,就是对b1的值在做改变 B& b3 = const_cast(b1); b2->m_iNum = 200; //fine cout << b1.m_iNum << endl; b3.m_iNum = 300; //fine cout << b2->m_iNum << endl; } int main(int argc, char* argv[]) { foo(); return 0; }



