Дизайн класса std :: ifstream

Те из нас, кто увидел красоту 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;

5
задан Nawaz 9 January 2011 в 16:44
поделиться