好吧,我遇到了一个古怪,也许有人可以解释它.源代码是(c ++ 11):
?#?include?struct xyz_ { float xyz[3]; float &x = xyz[0]; float &y = xyz[1]; float &z = xyz[2]; }; int main(int argc, char *argv[]) { xyz_ xyz; xyz.x = 0; xyz.y = 1; xyz.z = 2; xyz.xyz[1] = 1; printf("as array %f %f %f\n",xyz.xyz[0],xyz.xyz[1],xyz.xyz[2]); printf("as elements %f %f %f\n",xyz.x,xyz.y,xyz.z); int sizexyz = sizeof(xyz); int sizefloat = sizeof(float); printf("float is %d big, but xyz is %d big\n",sizefloat,sizexyz); return 0; }
输出是:
as array 0.000000 1.000000 2.000000 as elements 0.000000 1.000000 2.000000 float is 4 big, but xyz is 24 big
所以结构按照我的预期工作,但尺寸是它应该的两倍.在结构中使用chars而不是float会在运行时产生段错误.我想使用struct xyz_作为浮点数组或单个浮点元素.
这是未指定的引用是否需要存储.在这种情况下,您的输出表明您的编译器已决定使用存储来实现引用x
,y
以及z
.