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

Хай! Вопрос - когда мы перегружаем конструктор присваивания, функция имеет

следующий заголовок - Fraction& Fraction::operator= (const Fraction& fraction)
Мы возвращаем ссылку на объект. В реализации имеем следующее:
Fraction& Fraction::operator= (const Fraction& fraction)
{
// self-assignment guard
if (this == &fraction)
return *this;

// do the copy
m_numerator = fraction.m_numerator; // can handle self-assignment
m_denominator = fraction.m_denominator; // can handle self-assignment

// return the existing object so we can chain this operator
return *this;
}
Если this это указатель на объект, то *this это данные, почему мы в возвращаемом типе пишем что возвращаем ссылку, а не сам объект?

17 ответов

23 просмотра

чтобы можно было написать a=b=c

Nick-Salander Автор вопроса
Boris Usievich
чтобы можно было написать a=b=c

Чейнинг понимаю, не понимаю почему ссылка, мы то возвращаем объект

Если вернуть не ссылку, то это будет копия объекта, и весь смысл цепочки тогда теряется, мы же хотим несколько раз сделать что-то с конкретным объектом

Nick-Salander Автор вопроса
Андрей Таусинов
Если вернуть не ссылку, то это будет копия объекта...

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

Nick Salander
Ну по коды мы вернули разименованный указатель, ра...

тут важно смотреть на сигнатуру функции, если возврат идет по ссылке, то вернется ссылка

Nick-Salander Автор вопроса
Андрей Таусинов
тут важно смотреть на сигнатуру функции, если возв...

Ааа, вот как. А как компилятор создает ссылку, сам что ли? конвертирует тип?

Nick Salander
Ааа, вот как. А как компилятор создает ссылку, сам...

Ссылка - синтаксический сахар, по сути это указатель, который как бы уже разыменовали или alias - просто альтернативное имя для объекта. Смысл в том, что без указания того, что возвращается ссылка, в место, куда возвращается результат будет передана копия объекта, а в случае ссылки - сам объект. При этом нужно быть аккуратным и не возвращать ссылки на объекты с автоматическим временем жизни, созданные внутри функции

Nick-Salander Автор вопроса
Андрей Таусинов
Ссылка - синтаксический сахар, по сути это указате...

Получается совместимые типы или как правильно сказать не знаю, что ссылка - сам объект, что разыменованнный указатель - сам объект, поэтому сигнатура коррелируется с возвращаемым типом.

Nick Salander
Получается совместимые типы или как правильно сказ...

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

Nick Salander
Чейнинг понимаю, не понимаю почему ссылка, мы то в...

У тебя в функции что? Ссылка. Что написал, то и возвращается. Написал бы без ссылки - так бы и возвращалась

Nick-Salander Автор вопроса
Ilya Zviagin
У тебя в функции что? Ссылка. Что написал, то и в...

Мне было непонятно другое, как ссылка в возвращаемом типе стыкуется с разименованным указателем.

Nick Salander
Мне было непонятно другое, как ссылка в возвращаем...

Ссылка — это второе погоняло для УЖЕ существующей переменной

Nick-Salander Автор вопроса
Nick-Salander Автор вопроса

Вот прям очень доходчиво

Nick Salander
Вот прям очень доходчиво

Причем, что интересно, это так даже в чистом С, хотя там нет ссылок

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта