我知道该标准声明 std::tuple
不是简单可复制的,因此 std::memcpy
将在此类型上具有未定义的行为,但是否存在信息(可能是特定于编译器的东西)以安全地 memcpy std::tuple
与基本类型(int
、float
)?
一个可能的例子:
auto my_computation = [](...){ something...; return std::make_tuple(...) }
auto ret = my_computation(...);
unsigned char buf[...];
memcpy(buf, &ret, sizoof(ret));
//send the bytes out to another device
我(目前)对这个原始 memcpy 没有任何问题,但我不确定它是否可靠 (g++ (Alpine 10.3.1_git20210424) 10.3.1 20210424)。
我可以保证接收器架构与此字节表示兼容(例如字节顺序),所以这不是问题。
最佳答案
元组内存表示是实现定义的,就像派生类对象和基类对象的顺序一样。 如果您的数据 block 很大并且单个拷贝会产生性能问题(这是一个罕见且小众的问题),您应该使用标准内存布局创建自己的结构。这也将允许实现字节顺序更改。
关于c++ - std::tuple 和 memcpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72529309/