c++

Casting Away Constness

Posted by ysd on June 20, 2016

常量性转除

避免代码重复的安全做法:令non-const成员调用const成员

class TextBlock {
    public:
    ...
    const char& operator[] (std::size_t position) const
    {
        ...
        ...
        return text[position];
    }
    
    char& operator[] (std:;size_t position)
    {
        return 
        const_cast<char&>(                          // 将const版本[]返回的对象的const移除
            static_cast<const TextBlock&>(*this)    // 将传入的对象转成const,避免其递归调用non-const版本的[]
            [position]
        );
    }
};

令const版本调用non-const版本是错误的:const承诺不改变对象的逻辑状态,non-const却不会