为什么std :: string为空代码?

时间:2010-11-25 01:30:20

标签: c++ string

std::string的GNU实现中,其_S_empty_rep_storage定义为:

template<typename _CharT, typename _Traits, typename _Alloc>
  typename basic_string<_CharT, _Traits, _Alloc>::size_type
  basic_string<_CharT, _Traits, _Alloc>::_Rep::_S_empty_rep_storage[
    (sizeof(_Rep_base) + sizeof(_CharT) + sizeof(size_type) - 1) / sizeof(size_type)
  ];

为什么用size_type来定义,而不仅仅是char?为什么不定义为:

template<typename _CharT, typename _Traits, typename _Alloc>
  _CharT
  basic_string<_CharT, _Traits, _Alloc>::_Rep::_S_empty_rep_storage[
    sizeof(_Rep_base) + sizeof(_CharT)
  ];

仅供参考:我问的原因是因为我正在实现自己的字符串类 (具有std::string不符合的不同要求) 所以我想尽可能多地了解std::string的实施方式。

2 个答案:

答案 0 :(得分:1)

_CharT的大小可能会有所不同,特别是如果您使用的是wchar_t而不是char。

我意识到这只回答了部分问题。我不确定为什么Rep_base的东西是以它的方式定义的,但一般来说STL最好不要太担心它是如何工作的;只是为它感到高兴。

因为你非常(非常)不太可能找到一个基本的错误。

答案 1 :(得分:1)

对齐和舍入。 + sizeof(size_type) - 1) / sizeof(size_type)部分向上舍入到下一个更高数量的size_type元素。