«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему `std::optional` не поддерживает ссылочные типы?

Почему `std::optional` не поддерживает ссылочные типы?

Опубликовано 12 ноября 2024 г.
Просматривать:936

 Why Doesn\'t `std::optional` Support Reference Types?

Необязательные ссылочные типы: почему их отсутствие в std::optional и альтернативах

Класс стандартной библиотеки std::optional, представленный как std ::experimental::optional в libc, особенно не хватает специализации для ссылочных типов. В связи с этим возникает вопрос, будут ли такие специализации полезны.

Преимущества дополнительных ссылочных типов

Необязательные ссылочные типы могут иметь такие преимущества, как:

  • Эффективность: ссылки обычно более эффективны, чем копии, что потенциально снижает использование памяти и снижает нагрузку на производительность.
  • Краткость выражения: ссылка типы упростят выражения, включающие необязательные объекты, поскольку их можно будет разыменовать напрямую без явного развертывания.

Обоснование отсутствия

Несмотря на эти потенциальные преимущества, std:: Необязательный в настоящее время не имеет специализации для ссылочных типов. Причина кроется в дискуссиях в ходе процесса стандартизации.

Члены комитета выразили обеспокоенность по поводу семантики необязательных ссылок. Их беспокоили потенциальные проблемы, связанные со временем жизни и владением объекта, поскольку необязательные ссылки могли ссылаться на объекты, которые уже были уничтожены или недействительны по иным причинам.

Альтернативные варианты

В то время как std: :optional не поддерживает ссылочные типы, стандартная библиотека предлагает альтернативные решения:

  • Необязательные значения: std::optional специализируется на типах значений, предоставляя возможность представлять значение, которое может присутствовать или отсутствовать.
  • std::reference_wrapper: Этот класс позволяет создавать ссылки, которые сохраняются дольше ссылка на исходный объект. Однако у него нет семантики «возможно присутствие», как у std::optional.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3