将 int 复制到 boost/std::array 最简单有效的原因是什么?
以下似乎可行,但我不确定这是否是最合适的方法:
int r = rand();
boost::array<char, sizeof(int)> send_buf;
std::copy(reinterpret_cast<char*>(&r), reinterpret_cast<char*>(&r + sizeof(int)), &send_buf[0]);
最佳答案
只是为了比较,这里和 memcpy 是一样的:
#include <cstring>
int r = rand();
boost::array<char, sizeof(int)> send_buf;
std::memcpy(&send_buf[0], &r, sizeof(int));
你的判断是,强制转换的爆炸式增长(以及出错的机会)比 C++ 中使用同样存在于 C 中的函数的“罪过”好还是坏 ;-)
我个人认为 memcpy
是这种操作的一个很好的“警报”,原因与 C++ 风格的转换是一个很好的“警报”相同(阅读时容易发现,容易搜索)。但您可能更喜欢对所有内容都使用相同的警报,在这种情况下,您可以将 memcpy
的参数转换为 void*
。
顺便说一句,我可能对两种大小都使用 sizeof r
而不是 sizeof(int)
,但这在某种程度上取决于上下文是否要求数组“足够大”对于 r(恰好是一个 int)”或“与 int(恰好是 r)大小相同”。因为它是一个发送缓冲区,我猜缓冲区是有线协议(protocol)要求的大小并且 r
应该匹配缓冲区,而不是相反。所以 sizeof(int)
可能是合适的,但 4
或 PROTOCOL_INTEGER_SIZE
可能更合适。
关于c++ - 如何将 int 复制到 boost/std::char 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12472640/