C++ C++;匿名联合-在构造函数中实例化常量数组
我在一项任务中为这个问题苦苦挣扎了一段时间,不知道是否有人愿意帮忙 我试图了解C++中的匿名联盟并将它们用于四元数。 我很难弄清楚在构造函数中声明数组常量变量的语法 这里是anon结构C++ C++;匿名联合-在构造函数中实例化常量数组,c++,arrays,struct,heap,instantiation,C++,Arrays,Struct,Heap,Instantiation,我在一项任务中为这个问题苦苦挣扎了一段时间,不知道是否有人愿意帮忙 我试图了解C++中的匿名联盟并将它们用于四元数。 我很难弄清楚在构造函数中声明数组常量变量的语法 这里是anon结构 union { static const float* arr = new float[4]; struct { const float _x; const float _y; const float _z;
union {
static const float* arr = new float[4];
struct {
const float _x;
const float _y;
const float _z;
const float _w;
};
};
我已经尝试了很多组合,但都没有成功
Quaternion::Quaternion(const float x1, const float y1, const float z1, const float w1) :
?, ?, ?, ? {}
谢谢
arr
应该是数组,而不是指针。即使如此,在两个联合成员之间切换(例如写入数组和从x读取)仍然是未定义的行为,尽管它在许多编译器上都可以工作。感谢您的回复。要使arr成为数组,这是否意味着在堆栈上声明它。是的,这就是声明它的方式(虽然它并不意味着在堆栈上-它是一个成员,并且与union具有相同的存储)。那么这将取决于我如何实例化四元数类?一个要求是四元数在堆栈上实例化,而私有浮点数在堆上。我很高兴只使用匿名联盟之外的数组,我想这很奇怪。arr
应该是数组,而不是指针。即使如此,在两个联合成员之间切换(例如写入数组和从x读取)仍然是未定义的行为,尽管它在许多编译器上都可以工作。感谢您的回复。要使arr成为数组,这是否意味着在堆栈上声明它。是的,这就是声明它的方式(虽然它并不意味着在堆栈上-它是一个成员,并且与union具有相同的存储)。那么这将取决于我如何实例化四元数类?一个要求是四元数在堆栈上实例化,而私有浮点数在堆上。我很高兴只使用匿名联盟之外的数组,我想我只是好奇而已。