gpt4 book ai didi

c++ - 为什么 union 不允许其元素具有用户定义的构造函数?

转载 作者:搜寻专家 更新时间:2023-10-31 00:18:16 24 4
gpt4 key购买 nike

当第一个结构有构造函数时,我怎样才能使第二个结构工作?我得到错误:

error C2620: member 'test::teststruct::pos' of union 'test::teststruct::<unnamed-tag>' has user-defined constructor or non-trivial default constructor

代码:

struct xyz {
Uint8 x, y, z, w;
xyz(Uint8 x, Uint8 y, Uint8 z) : x(x), y(y), z(z) {}
};
struct teststruct {
union {
Uint32 value;
xyz pos; // error at this line.
};
};

我可以使用一个函数来初始化 xyz 结构,但这样会不会慢很多?更不用说:我有大量结构需要创建自己的函数,并带有 init_xyz() 等前缀,这不太好。有没有其他方法可以解决这个问题?

最佳答案

可能是为了避免这种情况:

struct A {
Uint8 a;
A() : a(111) {}
};

struct B {
Uint8 b;
B() : b(2222) {}
};

struct teststruct {
union {
A aValue;
B bValue;
};
};

应该发生什么,A 和 B 的构造函数都将尝试以不同的方式初始化相同的内存。与其让一些规则说明哪个会获胜,不如说不允许使用用户定义的构造函数可能更容易。

关于c++ - 为什么 union 不允许其元素具有用户定义的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11118220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com