const指针相关
e.g. compile error
const T *p;
T *q = p;
函数重载与const相关
- 重复声明错误:
void function(T); void function(const T); void function(T*); void function(T* const);
- 正确的重载:
void function(T*); void function(const T*); void function(T&); void function(const T&);
使用const_cast在非const函数中调用const函数
e.g.
#include <iostream>
using namespace std;
class A {
string a;
public:
A(string _a) :a(_a) {};
const char& operator[](size_t position) const
{
cout << "const function" << endl;
return a[position];
}
char& operator[](size_t position)
{
cout << "modifiable function" << endl;
return const_cast<char&>(static_cast<const A&>(*this)[position]);
}
};
int main()
{
A s("test string");
cout << s[2] << endl;
const A s2("test string");
cout << s2[2] << endl;
return 0;
}
output:
modifiable function
const function
s
const function
s
为什么不能在const对象中调用非const函数
非const对象的this的类型类似于T* const,即所谓的“顶层”const。因此可以调用const和非const函数(可以隐式转换为const T* const); 而const对象的this类型const T* const无法隐式转换为T* const,所以无法调用非const函数;