Почему в C++ нет встроенного типа данных для строк? Я понимаю что string.h входит в стандарт, но что бы инициализировать long и другие типы данных ничего подключать не надо.
С++ позволяет реализовывать составные типы любой сложности на самом C++ c очень высокой эффективностью. Потому, не имеет смысла типы, имеющие сложную структуру и сложное поведение, встраивать в язык - он и так переусложнён.
Кроме того, если ты пишешь какой-нибудь очень специализированный софт, то в любой момент можешь заменить стандартную реализацию строк на свою собственную - никак не меняя остальной свой код. И это преимущество выноса строк в отдельную библиотеку.
Потому что типы long и сишные строки char * (их, кстати, хватает для большинства простых задач c++) - не являются классами. Всё то, что является тяжеловесными классами - вынесено в соответствующие заголовки и библиотеки.