【发布时间】:2020-08-06 01:07:36
【问题描述】:
在实际提问之前,小前奏。我不关心安全,我关心性能。我知道这不合适,而且我知道这很 hacky,但是这非常快。
vector<float> result = move(*((vector<float>*)&vertices));
该代码滥用 C 样式强制转换和指针来强制编译器解释左侧数组 vertices,这是一个紧凑类型的向量,其中所有字段都是浮点数作为浮点数数组。
即
struct vertex {
float x;
float y;
float z;
}
vector<vertex> vertices;
这可以工作并且可以满足需要,但是有点难以阅读。我想知道是否有另一种方法可以以更易读的方式实现相同的结果。
【问题讨论】:
-
我会说
vector::resize加上std::memcpy应该可以在没有所有演员表的情况下解决问题 -
这实际上复制了数据,但据我所知,我在上面发布的内容并没有做任何复制,它重新解释了一个指针。即据我所知,sn-p 应该是恒定的
-
如果向量存储它的大小而不是结束指针,您的代码将无法工作。但是,如果您的代码恰好可以工作,它可能会比定义明确的解决方案具有更好的性能。
标签: c++ pointers vector types casting