gpt4 book ai didi

c++ - 取一个数组引用 `T(&)[n]` 到一个 `std::array` 的内容

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:41:27 27 4
gpt4 key购买 nike

假设我有一个 std::array<T, n>并希望获取对其内容的数组引用(即未公开的 elems 数组成员)。

我很惊讶地发现 std::array<T, n>::data()返回 T *而不是 T (&)[n] ,所以似乎有必要进行某种类型转换。我可以写:

std::array<int, 5> arr;
int (&ref)[5] = *reinterpret_cast<int (*)[5]>(arr.data());

但是,这看起来很丑陋并且可能不安全。它是合法的(定义明确的)代码吗?是否有更好的方法来做到这一点?

最佳答案

该标准没有提供array 的底层实现,但是如果它使用int[5] 作为底层表示,那么对于该实现,只有您的类型转换是(不可移植的)合法的。对于任何其他基础表示,您违反了严格的别名规则并输入了未定义的行为。

您可以按照标准库的先例,使用迭代器对来分隔您感兴趣的范围,而不是尝试将数组作为数组返回吗?

关于c++ - 取一个数组引用 `T(&)[n]` 到一个 `std::array<T, n>` 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13707048/

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