большинства задач в С++ обходиться без указателей?
Использовать ссылки
И в каких ситуациях без указателей нельзя обойтись? Какие-то супер явные кейсы, преимущества
Вот предположим. У тебя по адресу 0XBFD05400 находится регистр управления... допустим I2C. Удачи обратиться туда по ссылке.
ссылка тот же указатель, только всегда ссылающийся на существующий объект. если влезть в дерби реализации, то ты обнаружишь, что ссылка реализуется как константный указатель внутри языка
Да, я это смотрел И вот как раз возникает такой вопрос Что в принципе, для большинства задач - можно обойтись для указателя и избежать многих ошибок, верно?
нет, поскольку ссылка никак не контролирует время жизни объекта (только в случае константной ссылки при инициализации временным объектом), на который она ссылается. поэтому никакой безопастности без дополнительных но она не приносит
В общем, даже в суперсовременных плюсах в клиентском коде у ссылок и сырых указателей есть однозначно полезное применение - параметры функций. Функция принимает указатель, если готова работать как с nullptr, так и объектом, и ссылку, если хочет чтобы объект ей непременно дали. Механизм работы в обоих случаях не различается, это просто договорённость.
Ага, кажется понял
Но ссылка же не константа..
константный указатель и указатель на константу - это большая разница
Константная ссылка и ссылка на константу
ещё такой момент - если тебе требуется опционально ссылаться в классе на какой-то объект, с указателем это сделать просто - указатель или не nullptr, или nullptr, со ссылкой же так не получится сделать (извращения вроде std::optional<std::reference_wrapper<T>> я не рассматриваю)
аналог указателя в этом случае просто std::optional<T>, но он имеет много недостатков по сравнению с указателем: T должен быть полный типом
Обсуждают сегодня