如何分配ifstream&从方法返回到变量?

时间:2011-11-20 14:49:00

标签: c++

我的方法名称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;
}

我无法编译代码。我的问题是:

  1. 我可以将open_file方法的返回值分配给main()中的变量,如果是,那该怎么做?
  2. 如果我不能将open_file方法的返回值赋给变量,那么如果我将其返回类型更改为void会有什么区别?

1 个答案:

答案 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。这不那么令人困惑。