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

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일 수 있으며 값 범주는 항상 lvalue입니다. ..lvalue는 ..lvalue입니다. .

左手右手慢动作
  1. *this 유형은 TextBlock& 또는 const TextBlock&이 아닌 TextBlock입니다.

  2. C 의 참조는 "변수를 가리키는 상수 포인터"로, 포인터의 특별한 경우입니다.

  3. TextBlock &a2 = a1;은 참조 a2에 값을 할당하여 a1을 가리키고 a2 백도어는 수정될 수 없습니다(다른 TextBlock 개체를 가리킴).

阿神

*이것은 TextBLock이며 참조는 유형이 아닙니다. 이것의 목적은 강제 전송이 새 개체(복사 구성)를 생성하므로 참조를 추가해야 한다는 것입니다.

@felix021 조언 감사드립니다 위에서 말한 내용은 정말 잘못된 것입니다. 제가 실제로 표현하고 싶은 것은 참조도 포인터도 데이터 유형과 별개로 존재할 수 없다는 것입니다. 참조, 값 범주는 lvalue, rvalue 등이 될 수 있습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿