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일 수 있으며 값 범주는 항상 lvalue입니다. ..lvalue는 ..lvalue입니다. .*this
유형은TextBlock&
또는const TextBlock&
이 아닌 TextBlock입니다.C 의 참조는 "변수를 가리키는 상수 포인터"로, 포인터의 특별한 경우입니다.
TextBlock &a2 = a1;
은 참조 a2에 값을 할당하여 a1을 가리키고 a2 백도어는 수정될 수 없습니다(다른 TextBlock 개체를 가리킴).*이것은 TextBLock이며 참조는 유형이 아닙니다. 이것의 목적은 강제 전송이 새 개체(복사 구성)를 생성하므로 참조를 추가해야 한다는 것입니다.
@felix021 조언 감사드립니다 위에서 말한 내용은 정말 잘못된 것입니다. 제가 실제로 표현하고 싶은 것은 참조도 포인터도 데이터 유형과 별개로 존재할 수 없다는 것입니다. 참조, 값 범주는 lvalue, rvalue 등이 될 수 있습니다.