Существует действительно что-то, что имеет ссылка на может быть, существующих объектов семантики. Он называется указателем (const). Простой старый указатель без прав. Существует три различия между ссылками и указателями:
- Указатели могут быть нулевыми, ссылки не могут. Это именно то, что вы хотите обойти с
std::optional
.
- Указатели могут быть перенаправлены, чтобы указать на что-то еще. Сделайте это const, и эта разница также исчезнет.
- Ссылки не подлежат разыменованию
->
или *
. Это чистый синтаксический сахар и возможно из-за 1. И синтаксис указателя (разыменование и конвертируемый в bool) - это именно то, что std::optional
обеспечивает доступ к значению и тестирование его присутствия.
Обновление: optional
представляет собой контейнер для значений. Как и в других контейнерах (vector
, например), это не , предназначенный для. Если вам нужна дополнительная ссылка, используйте указатель или если вам действительно нужен интерфейс с похожим синтаксисом до std::optional
, создайте небольшую (и тривиальную) оболочку для указателей.
Update2: Что касается вопроса, почему нет такой специализации: потому что комитет просто сделал выбор в пользу его. Обоснование может быть найдено где-то в газетах. Возможно, это потому, что они считали, что указатели достаточны.
В заключение я пришел к выводу, что я могу использовать 'std :: optional>' для моих целей. –
Orient