串和放大器;和char *版本的string :: append(),string :: replace()和string :: compare()

时间:2011-11-16 07:56:01

标签: c++ string

std :: string中的两个重载函数引起了我的注意:

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

我很好奇为什么string :: append()的char *版本没有提供额外的参数size_t pos,如下所示:

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

对于其他两个功能,情况也是一样的:

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

这些函数的char *版本缺少参数size_t pos2,它不像字符串&对方。我的问题如下:

  1. 为什么std :: string会像这样设计它的界面?
  2. 为什么char * version函数也没有size_t pos
  3. 这背后的考虑是什么?
  4. 感谢您阅读!

2 个答案:

答案 0 :(得分:4)

因为您只需将pos添加到s

str.append(ptr + pos, len);

这并不是说它不是一个好的速记,但它们(通常)只想最小化地添加必要的功能,而不是简单的包装类型。

答案 1 :(得分:2)

也许你只能做str.append(s+pos, n);