文件流构造函数



文件流类不能接受string作为其构造符的参数,只能接受C字符串。

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

为什么会这样?这有道理吗?

因为在C++03中,std:istream没有以std::string为参数的构造函数。然而,在C++11中,它有!

所以,只要你使用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

如果要传递std::string的对象,则应使用.c_str()成员函数。这将把它转换成一个旧式字符串。

ifstream构造函数只接受旧式字符串。我猜ifstream可能不允许隐式转换,因为当真正不代表文件名字符串的对象被隐式转换时,它可能会引起一堆烦人的麻烦。

最新更新