Почему конструктор std::ifstream не принимает std::string?

Возможный дубликат:
Дизайн класса std::ifstream
Почему (i| o)fstream принимает параметр const char* для имени файла?

Глядя на конструкторы std::ifstream, я нахожу два:

ifstream ( );
explicit ifstream ( const char * filename, ios_base::openmode mode = ios_base::in );

Почему второй получает const char *, а не const std::string &?

Является ли это своего рода избеганием цикличности или прямой ссылки?


person WilliamKF    schedule 25.09.2012    source источник


Ответы (2)


Это было простое упущение. Об этом вовремя никто не подумал. Это было исправлено в C++11, где также принимается std::string. От 27.9.1.7/3:

explicit basic_ifstream(const string& s, ios_base::openmode mode = ios_base::in);

Эффекты: такие же, как basic_ifstream(s.c_str(), mode).

person Kerrek SB    schedule 25.09.2012

Ваш компилятор устарел. Обновите его, и вы должны найти конструктор std::string.

person Puppy    schedule 25.09.2012