标签:
const成员函数的一般好处有:
使用的过程中应该在const与non const成员函数之间避免代码重复:
class TextBlock { public: ... const char & operator[](std::size_t position)const { ... //边界检查 ... //日志数据访问 ... //校验数据完整性 return text[position]; } char & operator[](std::size_t position) { ... //边界检查 ... //日志数据访问 ... //校验数据完整性 return text[position]; } private: std::string text; }
const char & operator[](std::size_t position)const { ... //边界检查 ... //日志数据访问 ... //校验数据完整性 return text[position]; } char &operator[]{std:size_t position} { return const_cast<char&> ( static_cast<const TextBlocks&>(*this) [position] ); }
上面这一段可以做一些解释,第二个non-const语句块我们打算让non-const operator调用他的const兄弟,但是non-const操作符的后面如果只是单纯的调用operator[]那么会
导致iwuxian递归的调用自己,所以应该加上static_cast来将*this先进行转型。所以这里总共是有两次的转型。第一次是将*this从Textblocks转型到const Textblocks,就是为*this
来添加上const,之后再为返回的const operator[]中将const来移除。
标签:
原文地址:http://www.cnblogs.com/-wang-cheng/p/4854891.html