Те из нас, кто видел красоту STL пытаются использовать его как можно больше, а также поощрять других, чтобы использовать его там, где мы видим их, используя сырые указатели и массивы. Scott Meyers написали целую книгу по STL, с заголовком Effective STL. Но что случилось с разработчиками ifstream
, что они предпочли char*
по сравнению с std::string
. Интересно, почему первый параметр ifstream::open()
имеет тип const char*
, а не const std::string &
. Посмотрите, что это подпись:Дизайн станд :: ifstream класса
void open(const char * filename, ios_base::openmode mode = ios_base::in);
Почему это? Почему бы и нет:
void open(const string & filename, ios_base::openmode mode = ios_base::in);
Это серьезная ошибка с дизайном? Или этот дизайн преднамерен? Что может быть причиной? Я не вижу причин, по которым они предпочли char*
за std::string
. Обратите внимание, что мы все равно можем передать char*
последней функции, которая принимает std::string
. Это не проблема!
Кстати, я знаю, что ifstream
- это typedef, поэтому никаких комментариев по моему заголовку.: P. Это выглядит коротко, поэтому я использовал его.
Шаблон фактический класс:
template<class _Elem,class _Traits> class basic_ifstream;
Единственные потоки, связанные с STL, состоят в том, что оба являются частью std lib. __Стандартная библиотека! = STL .__ – sbi