假设我有一个 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/