将一个紧凑的浮点数数组转换为一个浮点数数组的更简洁的方法。

问题描述 投票:0回答:1

在实际问题之前,先说说小序曲。我不关心安全问题,我关心的是性能。我知道这样做不合适,我也知道这样做很黑,但是这样做的速度相当快。

vector<float> result = move(*((vector<float>*)&vertices));

那段代码是滥用C风格的casts和指针来强迫编译器解释左侧的数组。vertices 是一个紧凑类型的向量,其中所有的字段都是float,作为一个float数组。

struct vertex {
   float x;
   float y;
   float z;
}
vector<vertex> vertices;

这样做是可行的,也能达到目的,但是有点难读。我想知道是否有其他方法可以用更易读的方式达到同样的结果。

c++ pointers vector types casting
1个回答
1
投票

你更应该关心的是,你的代码的行为是什么?未定义 由于投是违反的。严格的别名 规则。请注意 vector<vertex> 是一个 截然不同 类型为 vector<float>.

特别是您假设在 struct 是相邻的,而且没有填充物。struct,甚至在最后。

为什么不使用 vector<float> 从一开始就注意到,第四个元素开始下一个三角形,以此类推?

© www.soinside.com 2019 - 2024. All rights reserved.