如何解决您如何描述对 std::array 底层数据成员的直接访问?
我见过 std::array
的实现,其中所有成员都是 public
。然而,这不意味着应该通过引用其名称直接访问底层数组(或任何类型的数据成员)。我知道访问上述成员的标准方式是通过 std::array::data()
。
ISO C++ 标准中是否有描述通过引用其名称直接访问底层数据成员的尝试的规范?
假设底层的 public
数据成员是一个固定大小的数组,其名称为 _data
。
std::array<char,10> a{};
a._data[0] = 'A';
ISO C++ 标准如何描述第二个语句?这是未定义的行为吗?未指定?
解决方法
C++ 标准没有定义在哪个成员名 std::array
下存储数组。它没有说明是否应该有一个名为 _arr
或 _data
或其他名称的成员。它指定了一些函数,如 data
和 operator[]
和 at
来访问数据。所以如果你想写出遵循C++标准的代码,那么你就被绑定到了指定的函数上。如果您有一个 STL 实现并且看到 std::array
有一个公共成员 arr
,您可以使用它。但是您将拥有不可移植的代码,并且无法与 STL 的其他实现一起使用。更糟糕的是:如果你的 STL 的作者不保证 std::array
不会改变,他可以在未来的更新中改变成员的名字。 STL 仍将符合 C++ 标准,但您的代码将不再编译。
简而言之:您不应该直接使用数据成员,您应该通过 C++ 标准化函数访问它。依赖于给定的成员名称是实现定义的行为。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。