В C++20 этой проблемы можно избежать, используя назначенные инициализаторы. Пример:
Код: Выделить всё
union my_union
{
const void* ptr;
const double dbl;
};
my_union foo = { .dbl = 42.1 };
Поскольку члены являются константными, также кажется, что единственный способ установить член - это инициализировать.
Я рассматривал возможность использования нового выражения размещения, чтобы перезаписать объединение, но меня смущают проблемы, связанные с временем жизни профсоюзам, особенно если размещение нового «активирует» предполагаемого члена (https://godbolt.org/z/z4nMTGGeq).
Код: Выделить всё
#include
#include
union my_union
{
const void* ptr;
const double dbl;
};
int main()
{
my_union foo{};
new(&foo) double {42.1};
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79186502/how-to-initialize-a-union-containing-const-data-members-in-c11[/url]
Мобильная версия