我看到了std::array
的实现,其中所有成员都是public
。然而,并不意味着通过引用其名称直接访问基础数组(或任何类型的数据成员)。我知道访问该成员的标准方式是通过std::array::data()
。
是否有国际标准化组织C++标准的规范描述了通过引用其名称直接访问底层数据成员的尝试?
让我们假设基础public
数据成员是一个固定大小的数组,它的名称是_data
。
std::array<char, 10> a{};
a._data[0] = 'A';
ISO C++标准如何描述第二条语句?这是未定义的行为吗?没有具体说明?
发布于 2021-03-06 02:35:56
C++标准没有定义成员名std::array
存储数组的方式。它没有说明是否会有一个名为_arr
或_data
的成员。它指定了一些函数,如data
、operator[]
和at
来访问数据。因此,如果您想要编写遵循C++标准的代码,那么您将绑定到指定的函数。如果您有STL的一个实现,并且看到std::array
有一个公共成员arr
,那么您可以使用它。但是,您将拥有不可移植的代码,并且不会与STL的其他实现一起工作。更糟糕的是:如果您的STL的作者不能保证std::array
不会更改,他可以在将来的更新中更改成员的名称。STL仍然是符合C++标准的,但是您的代码将不再编译。
为了简化它:您不应该直接使用数据成员,您应该通过C++标准化函数来访问它。依赖于给定的成员名是实现定义的行为。
https://stackoverflow.com/questions/66504609
复制相似问题