文件流类不能接受string
作为其construtor的参数,只能接受C-string。
char fname[] = "file";
string fname_string ("file");
ifstream ifs (fname); //OK
ifstream ifs (fname_string); //Error
为什么会这样?那有什么意义吗?
答案 0 :(得分:2)
因为在C ++ 03中,std:istream
没有以std::string
为参数的构造函数。但是,in C++11, it has!
因此,只要您使用C ++ 03,就可以这样做:
std::ifstream ifs (fname_string.c_str()); //Ok in C++03 and C++11 both!
只有在C ++ 11中,您才能这样做:
std::ifstream ifs (fname_string); //Ok in C++11 only
答案 1 :(得分:2)
如果要传递std::string
的对象,则应使用.c_str()
成员函数。这会将其转换为旧样式字符串。
ifstream构造函数只接受旧样式字符串。我猜测ifstream可能不允许隐式转换,因为当真正不代表文件名字符串的对象被隐式转换时,它会发生一堆烦人的麻烦。