Почему std :: необязательный <bool>использует два байта? - PullRequest
1 голос
/ 16 апреля 2020

Если C ++ позволяет bool использовать любой бит, Что мешает C ++ оптимизировать std::optional для использования 1 байта и использовать два бита для представления has_value и value()? Конечно, мы бы использовали маску, но в современных процессорах это не повредит перф.

1 Ответ

5 голосов
/ 16 апреля 2020

Это:

constexpr const T& operator*() const&;
constexpr T& operator*() &;
constexpr T&& operator*() &&;

Делает то, что вы хотите, невозможным. operator* необходимо вернуть ссылку на удерживаемый объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...