【发布时间】:2020-01-22 05:07:46
【问题描述】:
将对象的字节复制到unsigned char 的数组中然后使用memcpy 再次复制回来是否安全,是否保持对象不变?
也就是说,对于任何t,以下安全:
template <typename T>
void copy_back_and_forth(T& t) {
unsigned char buf[sizeof(T)];
std::memcpy(buf, &t, sizeof(T));
std::memcpy(&t, buf, sizeof(T));
}
...t 是否保持不变?
【问题讨论】:
-
是的............
-
unsigned char与std::byte的任何附件? -
@Tas - 嗯,是的,如果他们之间的答案会有所不同,我当然很感兴趣。
-
@sshashank124 - 这对你来说可能很明显,但是对于例如cppreference 当然没有说清楚:他们说
If the objects are potentially-overlapping or not TriviallyCopyable, the behavior of memcpy is not specified and may be undefined.... 并链接回 SO。 -
抱歉,这听起来并不居高临下。只是想满足最小字符要求。是的,应该是一样的。查看您分配单独缓冲区的具体情况,它应该可以正常工作
标签: c++ language-lawyer