【发布时间】:2019-01-28 21:28:18
【问题描述】:
我有这样的课
struct foo {
bool type;
union {
struct { std::string s; };
struct { std::function<std::string(void)> f; };
};
};
我需要定义赋值运算符,但是当我分配不同的类型时,我基本上是分配给未初始化的字段(我知道我必须先显式调用析构函数)。
我的猜测是这样的赋值是未定义的行为,因为我不知道字符串或函数的赋值是否不会重用某些字段。
如何在不调用任何未定义行为的情况下正确执行此操作?
我仅限于 C++11。
【问题讨论】:
-
type不是专门告诉你哪个字段是活跃的吗? -
@FrançoisAndrieux 当我想分配给与我分配的活动类型不同的对象时,就会出现问题
-
你能把你相信的作业展示给UB吗?
-
为什么不使用
boost::variant?
标签: c++ c++11 initialization destructor unions