这是安全还是这恰好适用于我当前的编译器?标准中有什么关于这个的吗?浮点向量中的结果是正确的。
class Color {
public:
Color(float r, float g, float b, float a) : mColor{r,g,b,a} {};
inline const float *data() const
{
return mColor;
}
private:
enum {vectorSize = 4};
float mColor[vectorSize];
};
//test
std::vector<Color> colors(2);
std::vector<float> floats(8);
colors[0] = Color(0.1, 0.2, 0.3, 0.4);
colors[1] = Color(0.5, 0.6, 0.7, 0.8);
memcpy(floats.data(), colors.data(), 8 * sizeof(float));
答案 0 :(得分:8)
保证可以正常工作
来自标准
23.3.6.1班级模板矢量概述
vector是一个支持随机访问迭代器的序列容器。此外,它支持(摊销)最后的恒定时间插入和擦除操作;在中间插入和擦除需要线性时间。存储管理是自动处理的,但可以提供提示以提高效率。向量的元素是连续存储的,这意味着如果v是一个向量,其中T是除了bool之外的某种类型,那么它服从所有0&lt的同一性&amp; v [n] ==&amp; v [0] + n ; = n&lt; v.size()。
所有POD都可以轻易复制