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指针就有这样的性质。
请大家指教,感激不尽。
感谢几位的回答,这个社区真的很好,谢谢。
澄清兩點:
引用是一種型別
表達式產出值的型別永遠不會是引用型別
書中這裡有誤。
*this
的型別可能是const T或T,value category永遠是左值。 ..是左值 ..左值 。 。*this
的型別是TextBlock,不是TextBlock&
或const TextBlock&
。c++中的引用是“指向變數的常指標”,是指標的一個特例。
TextBlock &a2 = a1;
是對引用a2賦值,使它指向a1,a2後門不能再被修改(指向其他TextBlock物件)。*this就是TextBLock ,引用不是一種類型, 這麼做的目的是:強轉會發生新物件的生成(拷貝構造), 所以要加上引用。
@felix021 感謝指點, 上面說的確錯了,引用是一種類型, 我其實想要表達的是引用和指針都不是能離開數據類型而單獨存在的, 表達式返回的永遠不可能是一個引用,value category可以是lvalue,rvalue等等