gpt4 book ai didi

c++ - std::array 位是否与旧的 C 数组兼容?

转载 作者:IT老高 更新时间:2023-10-28 12:37:09 24 4
gpt4 key购买 nike

std::array<T,N> v 的底层位表示T u[N]一样吗?

换句话说,复制N*sizeof(T) 是否安全?字节从一个到另一个? (通过 reinterpret_castmemcpy 。)

编辑:

为了澄清,重点是相同的位表示reinterpret_cast .

例如,假设我有这两个类在一些简单的可复制类型 T , 对于某些 N :

struct VecNew {
std::array<T,N> v;
};

struct VecOld {
T v[N];
};

还有遗留功能

T foo(const VecOld& x);

如果表示相同,那么这个调用是安全的并且避免了复制:

VecNew x;
foo(reinterpret_cast<const VecOld&>(x));

最佳答案

这并不能直接回答您的问题,但您应该简单地使用 std::copy :

T c[N];
std::array<T, N> cpp;

// from C to C++
std::copy(std::begin(c), std::end(c), std::begin(cpp));

// from C++ to C
std::copy(std::begin(cpp), std::end(cpp), std::begin(c));

如果 T 是一个可简单复制的类型,这将编译为 memcpy。如果不是,那么这将按元素进行复制分配并且是正确的。无论哪种方式,这都是正确的,并且可读性很强。无需手动字节算术。

关于c++ - std::array 位是否与旧的 C 数组兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39376813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com