C ++ Primer Plus этот пример указателя - PullRequest
2 голосов
/ 24 октября 2011

Извините за обращение к такому основному вопросу, но может ли кто-нибудь быстро объяснить это мне?Затем я удалю тему, чтобы не вызывать беспорядок в noob.

В следующем примере из текста C ++ Primer Plus не указывает ли оператор & в объявлении функции, что функция возвращает указатель на объект Stock?Почему же тогда функция продолжает возвращать s и this объекты по значению?

"... Однако вы хотите вернуть не это, потому что это адрес объекта. Вы хотите вернуть сам объект, и это символизируется * этим. (Напомним, чтоприменение оператора разыменования * к указателю дает значение, на которое указывает указатель.) Теперь вы можете завершить определение метода, используя * this в качестве псевдонима для вызывающего объекта. "

const Stock & Stock::topval(const Stock & s) const {

if (s.total_val > total_val)

   return s;           // argument object

else

   return *this;       // invoking object
}

Ответы [ 2 ]

1 голос
/ 24 октября 2011

Да, это сбивает с толку.C ++ массово перегружает каждый символ, потому что на клавиатуре недостаточно символов.

Амперсанд & используется для двух разных значений, которые концептуально схожи, но на самом деле совершенно разные языковые возможности.

Значение 1: Объявление ссылочного типа.Добавьте амперсанд к типу А, что означает «ссылка на тип А».Пример:

Stock x;
Stock& s = x; // now s is a reference to x

Значение 2: Адрес оператора.Унарный оператор, который возвращает указатель на свой аргумент.Пример:

Stock x;
Stock* s = &x; // now s a pointer to x

Напоминание: ссылки и указатели - это одно и то же, за исключением того, что они имеют разный синтаксис, и ссылки никогда не могут быть нулевыми, а ссылка на ссылку не может быть.

Не удаляйте эту тему, мы любим n00bs.Я сам n00b.

0 голосов
/ 24 октября 2011

const Stock & означает возврат константной ссылки на объект.Указатель на объект будет const Stock *.Не смешивайте два!Таким образом, указатель this разыменовывается и возвращается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...