возвращаемом значении фукнции ссылка, ноя не понимаю почему возвращается dereferenced указатель
const Stock & Stock::topval(const Stock & s) const
{
if (s.total_val > total_val)
return s; // here returning the reference it is OK
else
return *this; // here we are returning de-referenced pointer which should be the value, not the reference
}
У тебя что тип возврата функции ? Вот то и возвращается
Потому что когда дереференсится указатель - получается ссылка
ты же можешь написать Stock s = *this или const Stock &s = *this;
С чего это он должен быть value, not reference ?
когда дереференсится указатель он получает значение в памяти отадреса памяти указателя и заканчивая сдвигом в памяти согласно его типа.
Когда мы дереференсим указатель - мы получаем объект, который расположен по адресу, на который указывал указатель
советую не так об этом думать
надо было так сразу же написать, а не про ссылку
ты получаешь то значение, которое указываешь слева от переменной, вот так об этом думай
именно. Но на каком этапе возникает ссылка?
На этапе, когда делается *ptr
ссылка это просто алиас на переменную, *ptr это переменная, вот на нее будет алиас
ох, когда ты начнешь изучать деклтайп и авто вывод типов думаю совсем голова разбухнет...
то есть из-за того, что в возвращаемых параметрах укказана ссылка, то будет передана ссылка на объект, а не сам объект. Так?
Думаю, что не так как от external linkage
ссылка возникает, если слева от присваиваиня есть ссылка, если нет, то будет копирование
если она возвращает по значению то будет возвращаться по значению
даже если она возвращает объект у которого тип int&
да, я вроде это и имел в виду
то есть по сути в return происходит дополнительно скрытый & и вместо return *this; получается return &(*this); так?
& это взятие адреса, а не создание ссылки
Вот что там можно вообще не понять, кроме комментария? Указатель разименовывается, получается ссылка. Она и возвращается.
ну вот если она это долго понимает, то это будет жесть..
есть еще decltype(auto) и тд
согласен, но новичкам все это мозг взрывает, вроде
Ну не так как external linkage, который к тому же на практике часто не нужен
может быть, просто я долго писал на си давно, поэтому мне это было привычно )
Там происходит скрытая конвертация. загвоздка была в этом.
Конвертация из чего во что?
ага, еще ты никогда не ловилась в неявных кастах була к инту, то еще веселье такое дебажить))
из объекта в ссылку на объект.
Там изначально нет никакого объекта, есть только ссылка
так есть dereferenced pointer to this. это не ссылка, а именно объект.
Объект - это если бы у него был тип Stock
The C++ solution to this problem is to use a special pointer called this. The this pointer points to the object used to invoke a member function
Как это противоречит тому, что *this это ссылка?
хм... вы понимаете разницу между x, 1 и get_int(), где x это переменная типа int, а get_int - функция без параметров, которая возвращает int?
могу скинуть лекцию по value categories)
нет там никаких кастов.
нужно пожалуй тебе почитать про это
Есть, из Stock& в const Stock&
да эт что за каст-то... не каст и был...
настолько не каст, что между auto& и Stock const& выберет первое
Закрывай Прату. Выбрасывай его. Ты готова. Открывай майерса. Первая глава про категории значений
Обсуждают сегодня