1、const修饰变量,表示变量不能被改变,并且变量必须初始化,
const int N=100;
N=200;
const int i;
2、const初始化引用用法,可以使const引用绑定到一个非左值上 C++允许这么做,是因为const引用将创建一个临时变量,并且允许绑定
int &i=2;
const int &j=2;
int ii=222;
const double &iii=ii;
3、顶层const和底层const 用const 和指针同时使用有两种情况
int i=2;
const int* ii=&i;
int* const iii=&i;
第一种情况就是底层const const 修饰的是指针ii指向的i,ii的地址可以改,但是不可通过ii去改i的值 第二种情况就是顶层const 和第一种相反,iii的地址不可以改,但是却可通过iii去改i的值 是不是有点相似感,左值引用就是指针常量也就是第二个情况 4、const应用到类中 用const修饰该对象,不允许对象中的成员变量被修改
class A{
public:
int a=2;
void seta(int b){
a=b;
}
int geta(){
return a;
}
};
int main(){
const A n;
n.a=3;
return 0;
}
用const修饰该对象,不允许对象调用非const成员函数
class A{
public:
int a=2;
void seta(int b){
a=b;
}
int geta(){
return a;
}
};
int main(){
const A n;
n.seta(10);
std::cout<<a.geta()<<'\n';
return 0;
}
用const修饰该对象,允许对象调用const成员函数,但还是不允许改变成员变量
class A{
public:
int a=2;
void seta(int b)const{
a=b;
}
int geta()const{
return a;
}
};
int main(){
const A n;
n.seta(10);
std::cout<<a.geta()<<'\n';
return 0;
}
原因就是调用seta()函数时候调用了this指针,而this指针被const修饰不允许this->a=b去改变成员变量。
|