文件流构造函数

时间:2012-02-19 12:03:17

标签: c++

文件流类不能接受string作为其construtor的参数,只能接受C-string。

char fname[] = "file";
string fname_string ("file");
ifstream ifs (fname); //OK
ifstream ifs (fname_string); //Error

为什么会这样?那有什么意义吗?

2 个答案:

答案 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可能不允许隐式转换,因为当真正不代表文件名字符串的对象被隐式转换时,它会发生一堆烦人的麻烦。