以前看到C++函数基于const重载,例如下面这个例子:
class ConstTest
{
public :
const ConstTest &getConstTest() const
{
return *this;
};
private :
protected :
};
以前一直不理解为什么需要两个const,
首先,一个const放在函数的后面是因为,这个函数相当于这个函数:
Contest &getConstTest(ConstTest *const this);
这个时候要将this指针限制成const形式,也就是线支撑顶层指针(指向常量的指针),因为这个参数是隐藏的,无法修改,所以C++标准规定,可以在参数列表的后面再加一个const其作用就是用来限制this指针。但是函数前面也加一个const关键字一直不理解,昨天又重温了一遍这个const知识点,现在先来测试一下不加const之后会有什么效果:
ConstTest &getConstTest() const {
return *this;
};
运行之后报错:
错误 1 error C2440: “return”: 无法从“const ConstTest”转换为“ConstTest &” d:\projects\project1\project1\源.cpp 161 1 Project1。
上面说了不能将const ContTest转换为普通指针,也就是说,常量不可以转非常量,非常量可以转常量,当调用ConstTest::getConstTest()函数之后this指针转换成了const ConstTest *const this指针,this变成了指向常量的常量指针,如果此时返回值是非常的话编译器将会报错,所以函数前面的额const是用来修饰返回值的,否则将会报常量转非常量的错。
关于C++的const
最新推荐文章于 2025-05-30 23:23:43 发布