在哪里可以找到std :: bitset的数据成员?

时间:2018-09-11 05:26:03

标签: c++

当我阅读关于cppreference的bitset page时,我试图找到一些 data memeber 列来查看数据的存储方式。我发现没有这样的列,也没有其他的std类,例如std:string。然后,我去https://github.com/llvm-mirror/libcxx/blob/master/include/bitset,检查 bitset提要注释部分,关于它的数据成员,我什么都找不到。为什么?我在这里想念什么?任何标准类的示例都将不胜感激。

2 个答案:

答案 0 :(得分:7)

CppReference记录了公共接口,这是标准要求的唯一事情,您应该关心它。

与libc ++标头的提要相同:它只是标准的复制粘贴,可能放在那里作为库实现者的参考。您可以在下面找到实施的细节。

STL容器的数据成员是您不应该在意的标准实现细节,并且在各种标准库实现之间以及同一库的不同版本甚至不同的编译标志之间都可以更改。

答案 1 :(得分:4)

检查libcxx的实现,以下受保护的数据成员是实数的实现方式。

https://github.com/llvm-mirror/libcxx/blob/master/include/bitset#L163

template <size_t _N_words, size_t _Size>
class __bitset {
public:
  typedef size_t __storage_type;
  // ...
protected:
  // ...
  __storage_type __first_[_N_words]; // <========= the data
};

// ...

template <size_t _Size>
class _LIBCPP_TEMPLATE_VIS bitset
    : private __bitset<
          _Size == 0 ? 0 : (_Size - 1) / (sizeof(size_t) * CHAR_BIT) + 1, _Size>
{ /* ... */ };