Ответ 1
Интересно отметить, что форма append
здесь:
string& append( size_type count, CharT ch );
Зеркалирует конструктор, принимающий аналогичный ввод.
basic_string( size_type count,
CharT ch,
const Allocator& alloc = Allocator() );
И некоторые другие методы, которые принимают count
с символом, например resize( size_type count, CharT ch );
.
Строковый класс большой, и возможно, что конкретный вариант использования (и перегрузка) для str.append('b');
не рассматривался, или альтернативы считались достаточными.
Простое введение одной перегрузки для этого может ввести неоднозначность, если интегралы int
и char
соответствуют (на некоторых платформах это может иметь место).
Существует несколько альтернатив append
добавления одного символа.
- Добавление строки, содержащей один символ, может быть выполнено
str.append("b");
. Хотя это не совсем то же самое, он имеет тот же эффект. - Как уже упоминалось, есть
operator+=
- Существует также
push_back()
, что согласуется с другими стандартными контейнерами
Точка, вероятно, никогда не считалась прецедентом (или достаточно сильным прецедентом), поэтому соответствующая перегрузка/подпись не была добавлена к append
, чтобы удовлетворить ее.
Альтернативные проекты могут обсуждаться, но, учитывая зрелость стандарта и этого класса, маловероятно, что они скоро будут изменены - это может очень сильно нарушить много кода.
Можно также рассмотреть альтернативные подписи для append
; одним из возможных решений могло быть изменение порядка count
и char
(возможно, добавление по умолчанию);
string& append(CharT ch, size_type count = 1);
Другой, как описано в некоторой из критике basic_string
, заключается в удалении append
, существует множество способов достижения того, что это делает.