Причина того, что trim () отсутствует в стандартной библиотеке, заключается в том, что при создании последнего стандарта им приходилось находить баланс между формализацией текущего поведения (добавлением ничего нового, просто стабилизацией того, что уже существовало) и добавлением новых функций. , В общем, они предпочитали не добавлять функцию, если только 1) было бы невозможно иначе или 2) имелись значительные недостатки в использовании сторонних библиотек. Если сделать слишком много изменений,
- нарушить совместимость с существующим кодом (который, возможно, определил свою собственную trim ()
- Добавить больше работы для авторов компиляторов (у которых уже было огромное количество работы впереди)
- Сделать язык более сложным для изучения и использования.
С trim () не возникает серьезных проблем с совместимостью. Пока ваша сторонняя реализация trim () берет строку и возвращает строку, нам все равно, где она определена. Так что на самом деле не обязательно в стандартной библиотеке. Он может быть легко предоставлен другими библиотеками.
Напротив, что-то вроде строкового класса или вектора - это классы, которые должна предоставлять стандартная библиотека, потому что если вы используете пользовательский строковый класс, будут работать только строковые операции из этой библиотеки. При использовании стандартной строки библиотеки сторонние библиотеки могут использовать это общее определение строки, и каждый выигрывает.
Когда вышел последний стандарт, Херб Саттер написал пост, описывающий это очень хорошо здесь
Конечно, было бы неплохо иметь функцию trim (), но у них было больше рыбы, чтобы жарить. Сначала они должны были стандартизировать все основы. Я не думаю, что C ++ 0x добавит функцию обрезки, но он добавит много других вспомогательных утилит, которые еще в 98 году считались «ненужными» или слишком специализированными.