是否有任何安全且符合标准的方法可以将 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;
}
感觉应该是可能的,因为数据应该以相同的方式存储。
edit:需要明确的是,我不想清除新的 std::array,我想将现有数据引用为一个。
正如这篇文章中所讨论的如果 T 是 POD,std::array 是否保证是 POD? https://stackoverflow.com/questions/3674247/is-stdarrayt-s-guaranteed-to-be-pod-if-t-is-pod
std::array<int, N>
是 POD,因此是标准布局。据我了解标准布局要求,这意味着指向对象的指针与指向第一个成员的指针相同。由于 std::array 没有私有/受保护的成员(根据http://en.cppreference.com/w/cpp/container/array http://en.cppreference.com/w/cpp/container/array),这应该与包装数组中的第一个元素一致。因此像
reinterpret_cast< std::array<int, 5>* >( &data )
我认为保证可以按标准工作。但我必须承认,有时我在解释标准语言时遇到困难,所以如果我错了,请纠正我。
问候
克拉斯
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)