следующий заголовок - 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 это данные, почему мы в возвращаемом типе пишем что возвращаем ссылку, а не сам объект?
чтобы можно было написать a=b=c
Чейнинг понимаю, не понимаю почему ссылка, мы то возвращаем объект
Если вернуть не ссылку, то это будет копия объекта, и весь смысл цепочки тогда теряется, мы же хотим несколько раз сделать что-то с конкретным объектом
Ну по коды мы вернули разименованный указатель, разве это ссылка?
тут важно смотреть на сигнатуру функции, если возврат идет по ссылке, то вернется ссылка
Ааа, вот как. А как компилятор создает ссылку, сам что ли? конвертирует тип?
Ссылка - синтаксический сахар, по сути это указатель, который как бы уже разыменовали или alias - просто альтернативное имя для объекта. Смысл в том, что без указания того, что возвращается ссылка, в место, куда возвращается результат будет передана копия объекта, а в случае ссылки - сам объект. При этом нужно быть аккуратным и не возвращать ссылки на объекты с автоматическим временем жизни, созданные внутри функции
Мощно, благодарю!
Получается совместимые типы или как правильно сказать не знаю, что ссылка - сам объект, что разыменованнный указатель - сам объект, поэтому сигнатура коррелируется с возвращаемым типом.
терминологию еще сам в голове не уложил до конца, но в контексте возвращаемых значений я бы рассматривал ссылочные типы просто как способ передачи. Ну и само собой, что ссылка совершенно ествественно инициализируется значением того же типа, на который собственно и ссылается
У тебя в функции что? Ссылка. Что написал, то и возвращается. Написал бы без ссылки - так бы и возвращалась
Мне было непонятно другое, как ссылка в возвращаемом типе стыкуется с разименованным указателем.
Ссылка — это второе погоняло для УЖЕ существующей переменной
Да, человек выше объяснил, что да как
Вот прям очень доходчиво
Причем, что интересно, это так даже в чистом С, хотя там нет ссылок
Обсуждают сегодня