有人可以解释这个C ++符号吗?

时间:2009-01-01 13:18:47

标签: c++ arrays notation

if (vector1.x > ((float*)&vector1)[j])

j 仅仅是向量的索引吗? 例如C ++是否能够使用数组表示法检索这些值,即使vector不是数组? 如果是这样,我猜它通过引用 vector 来实现这个目的吗?

1 个答案:

答案 0 :(得分:11)

C ++标准说,将(pods)结构体的指针转换为其第一个元素类型的指针将产生指向其第一个元素的指针:

struct a {
    float a1;
    float a2;
    float a3;
};

a o1; ((float*)&o1); // points to o1.a1

我怀疑代码告诉编译器不要在a1,a2和a3之间添加任何填充,因此如果它对指针进行索引,它将精确指向它想要的浮点数。所以上面

((float*)&o1)[1] // *would* return o1.a2

这取决于平台,因为在标准C ++中无法更改填充。查看代码如何排列它,以及我是否正确:)