ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
2 мая
905362 Топик полностью
fk0, легенда (19.02.2019 13:10, просмотров: 111) ответил =AlexD= на Есть несколько моментов. Возвращая ссылку - ты возвращаешь сам объект, а не указатель на него, соответственно для использования не нужно разыменовывать.
Можно обобщить, возвращая ссылку я могу, верней компилятор, делать какие-то выводы из её типа: выбирать функцию для вызова (argument depentdent lookup), инстанцировать шаблон нужным типом (в момент компиляции, зная возвращаемое значение функции)... А получая указатель, уже ничего не сделать. Да, это хороший довод за ссылки вообще, не только в возвращаемом значении. С другой стороны я могу просто дописать звёздочку... и получить то же самое. Только я заранее должен знать, что вот точно там будет некий P<T>, имеющий operator* возвращающий T& (по-моему это никакая не адресная арифметика, а просто функция у P). И довод рушится. При условии, если заранее есть контракт, что будет возвращаться не объект по-значения, а именно нечто похожее на указатель, нечто косвенно адресующее. Но это условие не применимо в случае, когда может вернуться объект по значению. Т.е. мы не знаем, но предполагаем, что функция не может всегда возвращать указатель, т.к. может возникнуть необходимость возврата по значению. Хранить тупо негде, то что возвращается. Элементарный пример, математическая функция в принципе не может вернуть ссылку, или указатель, всегда будет возвращать по значению (либо требовать выделения памяти заранее и принимать ссылку/указатель на возвращаемое значение). И в таком случае, когда мы имеем потенциальную возможность возврата по значению, мы в этом же контексте можем вернуть и ссылку, но не можем указатель. Вот это действительный довод за ссылки в контексте возвращаемого значения.
[ZX]