Те из нас, кто видел красоту STL, стараются использовать ее как можно чаще, а также призывают других использовать ее везде, где мы их видим, используя необработанные указатели и массивы. Скотт Мейерс написал целую книгу по STL под названием Эффективный 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, так что без комментариев по поводу моего заголовка.:P. Он выглядит коротким, поэтому я использовал его.
Фактический шаблон класса:
template<class _Elem,class _Traits> class basic_ifstream;