搜尋

首頁  >  問答  >  主體

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

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中文网2772 天前467

全部回覆(3)我來回復

  • 伊谢尔伦

    伊谢尔伦2017-04-17 15:36:53

    澄清兩點:

    • 引用是一種型別

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

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

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 15:36:53

    1. *this的型別是TextBlock,不是TextBlock&const TextBlock&

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

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

    回覆
    0
  • 阿神

    阿神2017-04-17 15:36:53

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

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

    回覆
    0
  • 取消回覆