170 похожих чатов

Скажите, а вот здесь возвращается ссылка или значение this? в

возвращаемом значении фукнции ссылка, ноя не понимаю почему возвращается 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
}

50 ответов

20 просмотров

У тебя что тип возврата функции ? Вот то и возвращается

Потому что когда дереференсится указатель - получается ссылка

ты же можешь написать Stock s = *this или const Stock &s = *this;

С чего это он должен быть value, not reference ?

Nastya-Medveda Автор вопроса
Kirill 🚜
Потому что когда дереференсится указатель - получа...

когда дереференсится указатель он получает значение в памяти отадреса памяти указателя и заканчивая сдвигом в памяти согласно его типа.

Nastya Medveda
когда дереференсится указатель он получает значени...

Когда мы дереференсим указатель - мы получаем объект, который расположен по адресу, на который указывал указатель

Kirill 🚜
Когда мы дереференсим указатель - мы получаем объе...

надо было так сразу же написать, а не про ссылку

Nastya Medveda
когда дереференсится указатель он получает значени...

ты получаешь то значение, которое указываешь слева от переменной, вот так об этом думай

Nastya-Medveda Автор вопроса
Kirill 🚜
Когда мы дереференсим указатель - мы получаем объе...

именно. Но на каком этапе возникает ссылка?

Nastya Medveda
именно. Но на каком этапе возникает ссылка?

ссылка это просто алиас на переменную, *ptr это переменная, вот на нее будет алиас

Nastya Medveda
именно. Но на каком этапе возникает ссылка?

ох, когда ты начнешь изучать деклтайп и авто вывод типов думаю совсем голова разбухнет...

Nastya-Medveda Автор вопроса
Yalokin Kononov
ссылка это просто алиас на переменную, *ptr это пе...

то есть из-за того, что в возвращаемых параметрах укказана ссылка, то будет передана ссылка на объект, а не сам объект. Так?

Nastya Medveda
именно. Но на каком этапе возникает ссылка?

ссылка возникает, если слева от присваиваиня есть ссылка, если нет, то будет копирование

Sergey Sobolev
ссылка возникает, если слева от присваиваиня есть ...

если она возвращает по значению то будет возвращаться по значению

Sergey Sobolev
ссылка возникает, если слева от присваиваиня есть ...

даже если она возвращает объект у которого тип int&

Nastya-Medveda Автор вопроса
Yalokin Kononov
да

то есть по сути в return происходит дополнительно скрытый & и вместо return *this; получается return &(*this); так?

Nastya Medveda
то есть по сути в return происходит дополнительно ...

& это взятие адреса, а не создание ссылки

Nastya Medveda
то есть из-за того, что в возвращаемых параметрах ...

Вот что там можно вообще не понять, кроме комментария? Указатель разименовывается, получается ссылка. Она и возвращается.

ну вот если она это долго понимает, то это будет жесть..

есть еще decltype(auto) и тд

согласен, но новичкам все это мозг взрывает, вроде

Yalokin Kononov
согласен, но новичкам все это мозг взрывает, вроде

Ну не так как external linkage, который к тому же на практике часто не нужен

Kirill 🚜
Ну не так как external linkage, который к тому же ...

может быть, просто я долго писал на си давно, поэтому мне это было привычно )

Nastya-Medveda Автор вопроса
Yalokin Kononov
ну вот если она это долго понимает, то это будет ж...

Там происходит скрытая конвертация. загвоздка была в этом.

Nastya Medveda
Там происходит скрытая конвертация. загвоздка был...

ага, еще ты никогда не ловилась в неявных кастах була к инту, то еще веселье такое дебажить))

Nastya-Medveda Автор вопроса
Kirill 🚜
Конвертация из чего во что?

из объекта в ссылку на объект.

Nastya Medveda
из объекта в ссылку на объект.

Там изначально нет никакого объекта, есть только ссылка

Nastya-Medveda Автор вопроса
Kirill 🚜
Там изначально нет никакого объекта, есть только с...

так есть dereferenced pointer to this. это не ссылка, а именно объект.

Nastya Medveda
так есть dereferenced pointer to this. это не ссыл...

Объект - это если бы у него был тип Stock

Nastya-Medveda Автор вопроса
Artöm Bakri Al-Sarmini
Это ссылка

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

Nastya Medveda
The C++ solution to this problem is to use a speci...

Как это противоречит тому, что *this это ссылка?

Nastya Medveda
так есть dereferenced pointer to this. это не ссыл...

хм... вы понимаете разницу между x, 1 и get_int(), где x это переменная типа int, а get_int - функция без параметров, которая возвращает int?

Nastya Medveda
нет не понимаю.

могу скинуть лекцию по value categories)

Nastya Medveda
нет не понимаю.

нужно пожалуй тебе почитать про это

Ilya Zviagin
нет там никаких кастов.

Есть, из Stock& в const Stock&

Kirill 🚜
Есть, из Stock& в const Stock&

да эт что за каст-то... не каст и был...

Ilya Zviagin
да эт что за каст-то... не каст и был...

настолько не каст, что между auto& и Stock const& выберет первое

Nastya Medveda
нет не понимаю.

Закрывай Прату. Выбрасывай его. Ты готова. Открывай майерса. Первая глава про категории значений

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта