std::array
的后果之一是其实现定义的数据必须是公共的,否则它将不再是聚合。这允许我做这样的事情:
#include <array>
#include <iostream>
int main()
{
std::array<int, 5> arr{1, 2, 3, 4, 5};
#if defined(_LIBCPP_VERSION)
for (int i : arr.__elems_)
#else
for (int i : arr._M_elems)
#endif
std::cout << i;
}
考虑到大多数标准库都已经过很好的封装并且不会被滥用,这对我来说似乎相当不稳定。这有什么解决方法吗?可以改进std::array
的界面吗?
答案 0 :(得分:6)
标准委员会通过使您的代码非法来做得很好。您正在使用实现保留标识符。如果你打算故意用脚射击自己,那那不是委员会的问题。
在这种特殊情况下,&#34;滥用&#34;甚至不重要,因为您可以通过&#34;官方&#34;访问该数据。接口无论如何。但即使情况并非如此,再说一次:不要故意做愚蠢的事情。