声明变量
1)const string str与string const str含义相同,只是编程风格不同
2)带const修饰的变量是个常量,在之后用到的时候都不能被修改
3)对于值类型,单纯用“类型+变量名”声明,const对象可以用来初始化非const对象,这里只涉及到值的拷贝
对于指针类型,“类型* 变量名”,const对象不可以用来初始化非const对象,因为后者可能通过拷贝过来的指针值去修改指针指向的对象,但是这个对象时const的,不允许被修改
修饰(成员)函数
void memberFunc()const{};
1)对函数只能修饰类的成员函数
2)表示调用这个函数不会改变对象的状态(即成员变量值)
3)const对象可以调用const成员函数,但是不能调用非const成员函数(默认情况下,非const成员函数被· 假定可能修改对象的成员变量。因此,编译器禁止 const 对象调用这些可能修改其状态的函数)
4)非const对象可以调用所有类型成员函数
修饰形参
void func(const int variable){}
1)形式形参说明这个形参不可以被改变
2)适合于传递引用或者指针,即避免拷贝,又不会误改数据
总结(举例说明)
class exampleclass{
void memberFunc(){};
private:
int a;
}
1)void memberFunc(classB b){}:调用时允许改变a, b可以调用他的所有成员函数
2)void memberFunc(classB b)const{}:调用时不允许改变a, b不允许调用他的所有成员函数
3)void memberFunc(const classB b){}:调用时允许改变a, b可以调用他的所有成员函数
4)void memberFunc(const classB b)const{}:调用时不允许改变a, b不允许调用他的非const函数