class A {
bool flag;
optional param1;
optional param2;
}
< /code>
его хранение очень расточительно: из -за выравнивания парных разрядов каждый из логических, вместо идеального 1 байта будет принять 8 байт. Очевидно, что все было бы лучше, если бы мы могли хранить все три лодки рядом друг с другом, а затем два двойника, с одной прокладкой вместо трех, но как? Я хочу только избавиться от его расточительной прокладки. Просто multi_optional_extra
. Но мне интересно, есть ли более простое решение.
Когда вы создаете класс, который включает в себя несколько участников std :: Необязательно , например, < /p> [code]class A { bool flag; optional param1; optional param2; } < /code> его хранение очень расточительно: из -за выравнивания парных разрядов каждый из логических, вместо идеального 1 байта будет принять 8 байт. Очевидно, что все было бы лучше, если бы мы могли хранить все три лодки рядом друг с другом, а затем два двойника, с одной прокладкой вместо трех, но как? Я хочу только избавиться от его расточительной прокладки. Просто multi_optional_extra [/code]. Но мне интересно, есть ли более простое решение.
Некоторые реализации векторов (например, используют 1 бит на бит (в отличие от 8 бит, как в старом std::vector).
Новое В черновиках C++ также есть такие вещи, как std::bitset ( ).
Содержит ли новый черновик C++ разрешить std::map (2-битное значение)...
Почему я не могу объявить необязательный std :: lock_guard , а затем назначить его позже? То же самое с дополнительной строкой работает просто отлично.
Это работает:
std::mutex m;
std::optional lg(m);
Почему я не могу объявить необязательный std :: lock_guard , а затем назначить его позже? То же самое с дополнительной строкой работает просто отлично.
Это работает:
std::mutex m;
std::optional lg(m);