2011-11-16 5 views
2

Les deux fonctions surchargées dans std :: string a attiré mon attention:string et char * et version string :: append(), string :: remplacer() et string :: comparer()

string& append(const string& str, size_t pos, size_t n); 
string& append(const char* s, size_t n); 

I suis curieux que la raison pour laquelle la version char * de chaîne :: append() ne fournit pas un paramètre supplémentaire size_t pos, comme celui ci-dessous:

string& append(const char* s, size_t pos, size_t n); 

Pour les deux autres fonctions, la situation est la même:

int compare(size_t pos1, size_t n1, const string& str, size_t pos2, size_t n2) const; 
int compare(size_t pos1, size_t n1, const char* s, size_t n2) const; 

string& replace(size_t pos1, size_t n1, const string& str, size_t pos2, size_t n2); 
string& replace(size_t pos1, size_t n1, const char* s, size_t n2); 

La version char * de ces fonctions n'a pas le paramètre size_t pos2, qui n'est pas aussi flexible que leur contrepartie & de la chaîne. Ma question est la suivante:

  1. Pourquoi std :: string conçoit-il son interface de la sorte?
  2. Pourquoi la fonction char * version n'a-t-elle pas aussi size_t pos?
  3. Quelle est la (les) considération (s) derrière cela?

Merci d'avoir lu!

Répondre

4

Parce que vous pouvez simplement ajouter à poss:

str.append(ptr + pos, len); 

Cela ne veut pas dire que ce ne serait pas un raccourci agréable d'avoir, mais ils (en général) ne veulent ajouter au minimum les fonctions nécessaires , pas le genre de wrapper trivial.

+0

+1 pour une réaction rapide;) – chill

+0

En outre, 'str.append (ptr, pos, len)' est seulement un omble chevalier plus court que 'str.append (ptr + pos , len); '(et cela dépend de vos habitudes de blancs). – zneak

2

Peut-être que vous pourriez faire simplement str.append(s+pos, n);