如果成员函数有个const区别,代表成员函数被重载。
由于两类函数有部分功能重复,因此可以定义一个功能,另外一个函数调用另一个重载的成员函数。
实例:
class X
{
public:
/*前面的const代表返回值是const,这是因为在调用该函数时可能会出现问题,例如:
if(x[1]=2),本来的意思可能是判断x[1]是否等于2,但因为少打一个字符,就造成错误,如果不加const限定符,编译器不会报错,因此,需要加入const。
后面的const代表该函数由const对象调用,在函数体内,一般不改变对象成员。*/
const char& operator[](size_t pos) const
{
...
return text[pos];
}
char & operator[](size_t pos)
{
return const_cast<char &>(static_cast<const X&>(*this)[pos]);
}
private:
char *text;
} 在char & operator[](size_t pos)中,使用static_cast先将对象转成const类型,避免无穷递归。转成const类型后,调用const char& operator[](size_t pos) const函数,然后将返回的const类型通过const_cast转换符,删去const属性。
为什么不先定义non-const函数,再用const函数调用non-const函数?
这是因为const成员函数承诺绝不改变其对象的逻辑状态,如果在const成员函数内调用non-const成员函数,就会冒这种风险。

京公网安备 11010502036488号