почему не делают STL ifstream и ofstream классы берут станд.:: представить в виде строки как имена файлов?

Это - жалоба на STL. Почему делают они берут аргументы имени файла в качестве (символ *) и не в качестве станд.:: строка? Это, кажется, не имеет никакого смысла.

По этой теме существует два других вопроса:

Проблема - то, что у меня есть много кода, который похож на это:

    std::ofstream f(fname.c_str());

WhenI хотел бы, чтобы это было похоже на это:

std::ofstream f(fname);

Дополнительными проблемами, которые упоминаются в вышеупомянутых сообщениях, является проблема UTF-16 по сравнению с UTF-8. (UTF-16 мог бы содержать, АННУЛИРУЕТ, который повредил бы API POSIX). Но это не действительно проблема, потому что реализация могла преобразовать UTF-16 в UTF-8 прежде, чем назвать открытым ().

Но серьезно, это не имеет никакого смысла. Там какие-либо планы состоят в том, чтобы обновить STL?

9
задан Community 23 May 2017 в 10:33
поделиться

3 ответа

почему классы ifstream и ofstream не принимают std :: string в качестве имен файлов?

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

Планируется ли обновление STL?

Он называется C ++ 11 и будет новой версией стандарта. Не знаю, изменились ли файловые потоки. Вы можете посмотреть окончательный вариант и убедиться в этом сами.

Обратите внимание, что STL - это имя библиотеки контейнеров, алгоритмов и итераторов, включенной в стандартную библиотеку. Также частью стандартной библиотеки являются строки, потоки и другие.
В частности, потоки не являются частью STL. Они братья и сестры.

10
ответ дан 4 December 2019 в 13:46
поделиться

Насколько я помню, на самом деле представляет собой (по крайней мере, своего рода) ситуацию со строкой и wstring. Я не могу найти это сообщение прямо сейчас, но я достаточно уверен, что помню сообщение в Usenet Эндрю Кенига, в котором говорилось, что оно было поднято членами одного из национальных комитетов (Япония - это то, что я, кажется, припоминаю, но мог легко ошибаться) поднял вопрос о том, как они могут работать с именами файлов на разных языках (тем более, что относительно небольшое количество операционных систем в то время предоставляло большую поддержку для этого). Несмотря на то, что все началось довольно просто, быстро стало очевидно, что единственный способ избежать его превращения в огромный беспорядок - это прекратить всякое обсуждение идеи в целом.

2
ответ дан 4 December 2019 в 13:46
поделиться

Исторические причины. Библиотека iostream была разработана отдельно от строкового материала. Но почему это не было интегрировано в стандарт C ++, остается только догадываться. У меня появилось несколько вопросов по Usenet давно (включая теорию зависимости), но никогда не было действительно удовлетворительного объяснения.

3
ответ дан 4 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: