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

标签 c++ arrays reference

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

相关文章:

java - 在 Java 中创建一个队列数组

javascript - 访问数组 JavaScript 中的对象变量

c++ - 难以实现带有时间限制代码的类(C++)

c++ - Dev C++ 上出现了一个奇怪的 sizeof() 错误

python - 如何将 numpy 数组写入 csv 文件?

c - 什么是值语义和引用语义及其区别

c++ - 引用 vector 和调整大小的能力

java - 为什么将 boolean 原始值更改为 boolean 对象引用?

c++ - Lotus Notes C++ API 通过 UNID 获取文档

c++ - 如何清理坏的 OpenSSL 连接