在C++ 11中,执行以下代码的最佳方法是什么:
// definitions
vector<char> rcvbuf;
struct somethingParams
{
char Magic[4];
int Version;
int MsgID;
int MsgLen;
};
Run Code Online (Sandbox Code Playgroud)
码:
struct somethingParams mParams;
memcpy(&mParams, rcvbuf.data(), sizeof(somethingParams));
rcvbuf.erase(rcvbuf.begin(), rcvbuf.begin + sizeof(somethingParams));
Run Code Online (Sandbox Code Playgroud)
根据我的阅读,不建议在C++中使用memcpy.我知道这是"C风格".有没有更好的方法来实现我正在做的事情?(即将数据从向量复制到结构中.)
只是看看我是否可以使它更像"C++".
谢谢.
memcpy是C++的犹太人.当然它不应该用于制作数组的副本(我们有std::copy这个,以及向量和其他有趣的东西)但是从二进制数据初始化结构的情况本质上是类型不安全的,所以C++不给出你在这里的任何东西,C没有.
但是,您必须记住memcpy仅使用简单的可复制类型.您可以使用a static_assert来确保不违反此规则并触发未定义的行为.
static_assert(std::is_trivially_copyable<somethingParams>::value,
"somethingParams must be trivially copyable");
Run Code Online (Sandbox Code Playgroud)