c++关于调用重在运算符的类型问题。

浏览:34日期:2023-03-24

问题描述

effective c++中有这么一段。

class TextBlock{public: ... const char& operator[](std::size_t position) const { ... return text[position]; }char& operator[] (std::size_t position) { ... }private: std::string text;

代码大致这样,不明白的是它说:

*this 的原始类型分别是TextBlock&,和const TextBlock&。

为什呢这个this类型是引用呢?this不是直接指向类实例的么。

TextBlock a1 = TextBlock('hello');TextBlock &a2 = a1;a2[0]

是这样得来的引用?我不知道是我看这个书没看清楚,还是本身*this指针就有这样的性质。

请大家指教,感激不尽。

感谢几位的回答,这个社区真的很好,谢谢。

问题解答

回答1:

澄清两点:

引用是一种类型

表达式产出值的类型永远不会是引用类型

书中这里有误。*this的类型可能是const T或T,value category永远是左值。..是左值 ..左值 。。

回答2:

*this的类型是TextBlock,不是TextBlock&或者const TextBlock&。

c++中的引用是“指向变量的常指针”,是指针的一个特例。

TextBlock &a2 = a1;是对引用a2赋值,使它指向a1,a2后门不能再被修改(指向其他TextBlock对象)。

回答3:

*this就是TextBLock ,引用不是一种类型, 这么做的目的是:强转会发生新对象的生成(拷贝构造), 所以要加上引用。

@felix021 感谢指点, 上面说的的确错了,引用是一种类型, 我其实想要表达的是引用和指针都不是能离开数据类型而单独存在的, 表达式返回的永远不可能是一个引用,value category可以是lvalue,rvalue等等

相关文章: