将数组引用`T(&)[n]`作为`std :: array <T,n>`的内容

eca*_*mur 6 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());
Run Code Online (Sandbox Code Playgroud)

然而,这看起来很丑陋,可能不安全.它是合法的(明确定义的)代码,还有更好的方法吗?

Mar*_*k B 3

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

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