Те из нас, кто видел красоту STL, стараются использовать его как можно чаще, а также побуждают других использовать его везде, где мы их видим, используя необработанные указатели и массивы, Скотт Мейерс написал целую книгу по STL с названием Effective STL . Однако то, что случилось с разработчиками ifstream
, что они предпочли char*
над std::string
. Интересно, почему первый параметр ifstream::open()
имеет тип const char*
вместо const std::string &
. Пожалуйста, посмотрите на его подпись:
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, поэтому не комментируйте мой заголовок. Это выглядит коротко, поэтому я использовал его.
Фактический шаблон класса:
template<class _Elem,class _Traits> class basic_ifstream;