前言
const常用来修饰变量,表示变量不可修改,通常我们称它为常量
一、const修饰的变量
1、C++中const比C多出了一个属性,只能在本.cpp文件中使用,其他.cpp文件不可见
2、const修饰的变量不能在编译时修改,但可以在运行时通过内存去修改,但不建议这样使用
3、被const修饰的变量位于静态存储区或者栈区
const int a;
二、const修饰的函数
1、const修饰的函数叫做常函数,常函数中的this指针被const修饰,在常函数中成员变量不能修改
2、常对象只能调用常函数,但是类中的成员变量被mutable修饰,常函数可以对该成员进行修改
class student
{
public:
void show()const
{
cout<<"示范"<<endl;
}
};
三、const修饰的对象
1、const修饰的对象叫做常对象,常对象只能调用成员函数
2、常对象不能使用默认构造函数初始化
class student
{
public:
void show()const
{
cout<<"示范"<<endl;
}
};
int main()
{
student s;
s.show();
return 0;
}
四、const修饰的引用
1、const修饰的引用叫做常引用,不能通过常引用改变变量的值
2、常引用可以指向临时的值
class student
{
public:
student(const student& other){}//拷贝构造函数,其中参数就是常引用
student(){}
void show()const
{
cout<<"示范"<<endl;
}
};
五、const修饰的指针
1、const修饰的指针一般都是一些隐藏起来的指针,C++离不开指针,但是在日常的编码中,指针通常是以被封装的形式存在,发挥着十分重要的作用
2、类中的this指针,就是被const修饰的,这与常函数的this指针有些不同,该this指针为this指针的本体,常函数中this指针表示this指针指向的成员变量不能改
#include <iostream>
using namespace std;
class Myclass
{
public:
Myclass(int i=1)
{
cout<<1;
}
~Myclass()//析构函数函数体内建议不要写delete
{
cout<<2;
delete this;
this=NULL;//此处报错,去掉此句会造成死递归
}
};
void fun()
{
Myclass m;
}
int main()
{
fun();
return 0;
}
总结
1、const本意就是不可更改,既然已经使用const进行修饰大家最好不要去尝试更改,如果到了万不得以的时候,也恰恰说明了你的逻辑可能出现了一些问题
2、在编码时也要注意变量的生存周期,引用作为参数是不可以传递临时值的,但是常引用却可以,通常在模板或者拷贝构造中会碰到类似的问题
版权声明:本文为weixin_52109967原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。