const 意味着变量无法被改变
修饰常量
const int a = 3;
修饰指针( 就近原则)
const int* a = &b; *a = 3; error
int* const a1 = &b; a1 = &b1; error
修饰类的成员
修饰类变量时,只能通过构造函数
using namespace std;
class A{
public:
A(int a):m_a(a){} //正常
A(int a){ //报错
m_a = a;
}
private:
const int m_a;
};
int main(){
A A1(1);
}
修饰成员函数
- 表示返回的指针无法修改
- 表示函数参数无法修改
- 表示无法修改成员变量, 可以修改mutable修饰的成员变量
#include <iostream>
using namespace std;
class A {
public:
int a = 1;
/*
第一个const:表示返回指针指向不可被更改
第二个const:参照const修饰变量的用法
第三个const:表示该成员函数不可修改成员变量
*/
const int* show(const int* p) const ;
};
const int* A::show(const int* p) const {
a = 2;//报错,被第三个const限制
*p = 2;//报错,被第二个const限制
cout<<"a="<<a<<endl;
cout<<"*p="<<*p<<endl;
return p;
}
int main(){
A a;
int c = 2;
const int *b = &c;
b = a.show(b);
*b = c;//报错,被第一个const限制
}
修饰对象
表示只能访问const 的成员变量和函数
const class object(params);
const class *p = new class(params); //两种用法等价