Dans la mise en œuvre GNU de std::string
, son _S_empty_rep_storage
est défini comme:Pourquoi le rep vide de std :: string est-il tel qu'il est?
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)
];
Pourquoi est-il défini en termes de size_type
plutôt que de simplement char
? Pourquoi n'est-il pas défini comme:
template<typename _CharT, typename _Traits, typename _Alloc>
_CharT
basic_string<_CharT, _Traits, _Alloc>::_Rep::_S_empty_rep_storage[
sizeof(_Rep_base) + sizeof(_CharT)
];
?
Pour votre information: La raison pour laquelle je demande est parce que je suis mise en œuvre ma propre classe de chaîne (qui a des exigences différentes que std::string
ne répond pas) donc je voudrais comprendre autant que possible quant à la façon std::string
est implémenté.
Parce que le résultat n'est pas le même? –
"plutôt que simplement char" <- Voulez-vous dire "plutôt que simplement _CharT" là? –
"l'implémentation de ma propre classe de chaînes" comporte des points d'interrogation écrits dessus. Êtes-vous absolument sûr de devoir faire cela? – CJBrew