【发布时间】:2012-06-20 11:07:03
【问题描述】:
当第一个结构有构造函数时,如何使第二个结构工作? 我得到错误:
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() 等,这并不好。有没有其他方法可以解决这个问题?
【问题讨论】:
-
@DavidRodríguez-dribeas,没有其他方法可以解决这个问题吗?
-
你用 unions 做什么,你想节省内存吗?
-
@Rookie:考虑使用命名构造函数作为命名约定
struct xyz { static xyz init(int x, int y, int z); };的变通方法,就性能而言,构造函数是 函数,相同的优化可以包括内联在内,因此应该没有性能差异。 -
@DavidRodríguez-dribeas,但是为什么我听说我总是应该使用初始化列表,因为它们更快?
-
@ScottLangham,我不是想节省内存,而是简化数据结构:我可以重复结构 4 次,或者我可以为变量提供更多别名。我目前也在使用 structs 类型的类型转换器:我可以为一个内存位置使用 3 种不同的类型,当我使用该内存时,我选择正确的类型,例如 data.int16_a 或 data.int32 等。我可以转换每次我使用它们时手动设置,但我发现联合非常适合这种用途。
标签: c++ visual-c++ unions c++03