我的方法名称open_file
声明如下。
ifstream& open_file(ifstream &in, const string &filename)
{
in.close();
in.clear();
in.open(filename.c_str());
return in;
}
我想在main()方法中将其返回值赋给变量:
int main()
{
ifstream val1;
ifstream val2 = open_file(val1, "test.cpp");
return 0;
}
我无法编译代码。我的问题是:
答案 0 :(得分:3)
ifstream val2 = open_file(val1, "test.cpp");
这将无法编译,因为它会尝试制作流对象的副本,该副本通过创建复制构造函数private
而被禁用(请参阅this)。
这样做:
ifstream & val2 = open_file(val1, "test.cpp");
//val1 and val2 is same here, as val2 is just a reference to val1
但是,为什么你会这样做呢?你可以简单地写一下:
open_file(val1, "test.cpp");
//use val1 here - no need to define val2
由于忽略了返回值,因此最好使返回类型为void
。这不那么令人困惑。