Те из нас, кто увидел красоту 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, поэтому не комментируйте мой заголовок. Он выглядит коротким, поэтому я его использовал.
Фактический шаблон класса:
template class basic_ifstream;