来自std :: vector对象的memcpy底层数据

时间:2014-02-06 01:22:09

标签: c++ compiler-construction memcpy

这是安全还是这恰好适用于我当前的编译器?标准中有什么关于这个的吗?浮点向量中的结果是正确的。

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));

1 个答案:

答案 0 :(得分:8)

保证可以正常工作

来自标准

  

23.3.6.1班级模板矢量概述

     

vector是一个支持随机访问迭代器的序列容器。此外,它支持(摊销)最后的恒定时间插入和擦除操作;在中间插入和擦除需要线性时间。存储管理是自动处理的,但可以提供提示以提高效率。向量的元素是连续存储的,这意味着如果v是一个向量,其中T是除了bool之外的某种类型,那么它服从所有0&lt的同一性&amp; v [n] ==&amp; v [0] + n ; = n&lt; v.size()。

所有POD都可以轻易复制