尽可能使用const代替#define
有时候需要重载const
版本与非const
版本的成员函数,但他们的代码又很多重复
所以可以直接用非const
函数调用const
函数
class Text {
private:
string text;
public:
Text(string input): text(input) {}
const char& operator [] (size_t pos) const {
cout << "const operator: ";
return text[pos];
}
char& operator [] (size_t pos) {
cout << "non-const operator: ";
// return text[pos];
return const_cast<char&>(static_cast<const Text&>(*this)[pos]);
}
};
int main(int argc, char const *argv[])
{
Text t("hello");
cout << t[0] << endl;
return 0;
}
static_cast
将this
指针转换为const
指针,这样就可以调用const operator[]
const_cast
将返回值解除const