2010-11-25 116 views
1

在GNU实施std::string,其_S_empty_rep_storage被定义为:为什么std :: string的空rep是这样的?

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) 
    ]; 

FYI:我问的原因是因为我实现我自己的字符串类 (即有std::string不符合要求不同) 所以我想了解尽可能多的关于如何std::string已实施。

+0

因为结果是不一样的? – 2010-11-25 01:38:22

+0

“,而不是简单的字符”< - 你的意思是说“而不是简单_CharT”在那里? – 2010-11-25 10:25:25

回答

1

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

我意识到只回答问题的一部分。我不确定为什么Rep_base的东西是这样定义的,但通常在STL中最好不要太担心它是如何工作的;只是为它感到高兴。

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

1

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

相关问题