使用memcpy直接将数据复制到std::vector中是否合法?像这样: char buf[255]; FillBuff(buf); std::vector<char> vbuf; vbuf.resize(255) memcpy(vbuf.data(), &buf, 255);
回答您的问题,是的,它可以工作,但这是由于实现了std :: vector<char>。对于非POD类型和std :: vector具有影响内存布局的特定模板专业化(例如std :: vector<bool>)的类型,它将不起作用。这就是为什么应该使用std :: copy,它将表现正确而不受影响。正如@user4581301所指出的那样,memcpy可能是不必要的,因为您可以像对待char *缓冲区一样对待std :: vector :: data()。
char
这样的简单POD类型,可以使用Fine。不要尝试使用例如std::vector<std::string>
之类的类型。顺便说一句:如果可能的话,可以尝试使用FillBuff(vbuf.data());
直接填充缓冲区而跳过memcpy
。 - user4581301memcpy(vbuf.data(), &buf, 255);
中的&
是不必要的;只需使用memcpy(vbuf.data(), buf, 255);
即可。 - Adrian Molestd::copy
呢? - Mansoorvbuf.data()
指针传递给一个接受char*
参数的函数(可能是用普通的C语言编写的函数)。 - Adrian Molestd::copy(std::begin(buf), std::end(buf), vbuf.begin());
- 生成的汇编代码很可能是一样的,但这样更易于维护。 - Ted Lyngmo