В реализации GNU для std::string
его _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)
];
?
К вашему сведению: причина, по которой я спрашиваю, состоит в том, что я реализую свой собственный класс строки (который имеет другие требования, * 1013)* не соответствует), поэтому я хотел бы понять как можно больше о том, как реализован std::string
.