c++ - std::tuple 和 memcpy

标签 c++ stdtuple

我知道该标准声明 std::tuple 不是简单可复制的,因此 std::memcpy 将在此类型上具有未定义的行为,但是否存在信息(可能是特定于编译器的东西)以安全地 memcpy std::tuple 与基本类型(intfloat)?

一个可能的例子:

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/

相关文章:

C++ - 在 unordered_map 中使用多个值作为键的最佳方式

c++ - CMake 相当于 Visual Studio 的 Property Sheets (.vsprops)

c++ - Mac 终端编译错误

c++ - 常见的 C 模式,但用 C++ 表示?

c++ - std::tuple-like 的命名要求?

c++ - std::apply 是否应该仅适用于 std::tuple?

c++ - 在大项目中使用 c++11 std::tuple

c++ - std::tie 语法不清晰

C++ 11 Boost 1.65 recursive_directory_iterator 给出段错误

c++ - 在 lambda 中通过引用捕获 unique_ptr 如何正常工作?