gpt4 book ai didi

c++ - 将 C cstyle 数组视为 std::array

转载 作者:IT老高 更新时间:2023-10-28 12:53:29 26 4
gpt4 key购买 nike

是否有任何安全且符合标准的方法可以将 C 样式数组视为 std::array 而无需将数据复制到新的 std::array 中?

这显然无法编译,但这是我想要的效果(我的实际使用更复杂,但这个简短的示例应该显示我想要做什么)。我猜 reinterpret_cast 会“工作”但可能不安全?

#include <array>

int main()
{
int data[] = {1, 2, 3, 4, 5};

// This next line is the important one, treating an existing array as a std::array
std::array<int, 5>& a = data;
}

感觉这应该是可能的,因为数据应该以相同的方式存储。

编辑: 明确地说,我不想清除新的 std::array,我想将现有数据作为一个引用。

最佳答案

如本文所述 Is std::array<T, S> guaranteed to be POD if T is POD?

std::array<int, N>是 POD,因此是标准布局。据我了解标准布局要求,这意味着指向对象的指针与指向第一个成员的指针相同。由于 std::array 没有私有(private)/ protected 成员(根据 http://en.cppreference.com/w/cpp/container/array ),这应该与包装数组中的第一个元素一致。因此像

reinterpret_cast< std::array<int, 5>* >( &data )

在我看来,保证按标准工作。不过,我必须承认,有时我在解释标准语言时有困难,所以如果我错了,请纠正我。

问候克拉斯

关于c++ - 将 C cstyle 数组视为 std::array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11205186/

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