2009-05-10 2 views
1

Я смотрю файл .h класса Wrapper. И класс содержит один частный элемент:Вопрос о & оператор в C++

T* dataPtr; 

(где T как в template < class T > определен в верхней части файла .h)

Класс предоставляет два «* перегрузки оператора» методы:

T& operator*() 
{ 
    return *dataPtr; 
} 

const T& operator*() const 
{ 
    return *dataPtr; 
} 

Оба просто возвращают *dataPtr, но что означает обозначение «*dataPtr» на самом деле возврат, на простом английском языке? И как он соответствует типу возврата «T&»?

ответ

6

Тип возврата T & указывает, что вы возвращаете ссылку экземпляра объекта T. DataPtr является указателем, который вы «разыменования» (получить опорное значение/экземпляр указателя), используя *.

2

dataPtr - это указатель на что-то.

Оператор * разыскивает указатель, поэтому * dataPtr (или вместо 'is', вы можете сказать 'refer to' или 'is reference to') pointee, то есть вещь, на которую указывает dataPtr ,

T & означает «ссылка на объект, тип которого является T» (не следует путать с T *, что означает «указатель на объект, тип которого является T»).

1

*DataPtr - это фактические данные, на которые указывает DataPtr. Оба оператора возвращают ссылку на T. A ссылка - это тип, который вы должны думать о другом имени для значения, на которое оно ссылается. «Под капотом», это похоже на указатель, но не думайте об этом так. Он не может выполнять указательную математику или быть «повторно включен». Один из операторов - const и используется для объекта const, а другой используется для обычного объекта.

1

Класс оболочки, похоже, действует как указатель на C++.

Оператор * разыскивает оболочку, которая будет оценивать предмет, который он хранит (в dataPtr). То, что вы получаете, является ссылкой на это содержимое. Например. Вы можете присвоить то ссылку

*intWrapper = 42;

Есть два оператора, поскольку существует постоянная и непостоянная версия. Когда вы разыскиваете постоянный класс-оболочку, вы не можете назначить ему (возвращается константа (T &)