尽可能使用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