Возможный дубликат:
Дизайн класса 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 &
?
Это что-то вроде избегания округлости или прямой ссылки?
Это было простое упущение. Никто не думал об этом вовремя. Это было исправлено в 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)
,
Ваш компилятор устарел. Обновите его, и вы должны найти std::string
конструктор.