在实际问题之前,先说说小序曲。我不关心安全问题,我关心的是性能。我知道这样做不合适,我也知道这样做很黑,但是这样做的速度相当快。
vector<float> result = move(*((vector<float>*)&vertices));
那段代码是滥用C风格的casts和指针来强迫编译器解释左侧的数组。vertices
是一个紧凑类型的向量,其中所有的字段都是float,作为一个float数组。
即
struct vertex {
float x;
float y;
float z;
}
vector<vertex> vertices;
这样做是可行的,也能达到目的,但是有点难读。我想知道是否有其他方法可以用更易读的方式达到同样的结果。
你更应该关心的是,你的代码的行为是什么?未定义 由于投是违反的。严格的别名 规则。请注意 vector<vertex>
是一个 截然不同 类型为 vector<float>
.
特别是您假设在 struct
是相邻的,而且没有填充物。struct
,甚至在最后。
为什么不使用 vector<float>
从一开始就注意到,第四个元素开始下一个三角形,以此类推?