c++关于调用重在运算符的类型问题。
PHP中文网
PHP中文网 2017-04-17 15:34:53
0
3
462

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指针就有这样的性质。

请大家指教,感激不尽。

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

PHP中文网
PHP中文网

认证0级讲师

全部回覆(3)
伊谢尔伦

澄清兩點:

  • 引用是一種型別

  • 表達式產出值的型別永遠不會是引用型別

書中這裡有誤。 *this的型別可能是const T或T,value category永遠是左值。 ..是左值 ..左值 。 。

左手右手慢动作
  1. *this的型別是TextBlock,不是TextBlock&const TextBlock&

  2. c++中的引用是“指向變數的常指標”,是指標的一個特例。

  3. TextBlock &a2 = a1;是對引用a2賦值,使它指向a1,a2後門不能再被修改(指向其他TextBlock物件)。

阿神

*this就是TextBLock ,引用不是一種類型, 這麼做的目的是:強轉會發生新物件的生成(拷貝構造), 所以要加上引用。

@felix021 感謝指點, 上面說的確錯了,引用是一種類型, 我其實想要表達的是引用和指針都不是能離開數據類型而單獨存在的, 表達式返回的永遠不可能是一個引用,value category可以是lvalue,rvalue等等

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板