string & and char * версия string :: append (), string :: replace () и string :: compare () - PullRequest
2 голосов
/ 16 ноября 2011

Две перегруженные функции в 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. Какие соображения стоят за этим?

Спасибо за чтение!

Ответы [ 2 ]

4 голосов
/ 16 ноября 2011

Потому что вы можете просто добавить pos к s:

str.append(ptr + pos, len);

Нельзя сказать, что это было бы нехорошо, но они (как правило) хотят лишь минимально добавить необходимые функции, а не тривиальный вид оболочки.

2 голосов
/ 16 ноября 2011

Возможно, вы могли бы сделать просто str.append(s+pos, n);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...