Conast
1. 变量加Const
1.1 引用
引用值不变
用途:函数参数传递,避免调用拷贝构造函数
void dosomething(cosnt &int a, const &int b)
1.2 指针
指针指向的内容不变
const int *p = 8;
指针值不变
int a = 8;
int* const p = &a;
指针和指向的内容都不变
int a = 8;
const int * const p = &a;
1.3 普通变量
常量
const int a = 8;
2. 函数加Const
2.1 函数后
说明函数不修改类成员变量
class test
{
public:
test(){}
~test(){}
void dosomething(int a, int b) const
{
// 错误
c = a + b;
}
private:
int c;
};
2.2 函数前
说明返回一个const值
const int dosomething(int a, int b)
{
return a + b;
}
4. 同名函数
我们经常看到在一个类型中,有相同的两个函数,一个后面有const,一个后面没有。
class test
{
public:
test() : a(1){}
~test(){}
int get()
{
return a;
}
int get() const
{
return a;
}
private:
int a;
};
这是为啥子呢?
因为在使用类对象时,对象有可能是const和非const对象,如果是const对象的话,函数就不可以修改对象的成员变量。那么这时如果调用一个结尾没有const的对象函数,就会报错。
void dosomething(const test& a)
{
a.get();
}
这里看起来没什么特别的,但实际上调用的是int get() const,编译就能够通过啦
3. Reference
1、在c++中其实是有最小权限原则的,非const对象是可以调用const成员函数的。
2、const成员函数是不能调用非const成员函数,只能通过强制或者定义mutable
3、构造与析构函数不能定义为const成员函数,构造跟析构会对对象做修改