如何将 ifstream&return from 方法分配给变量?

How to assign ifstream& return from method to variable?

本文关键字:分配 方法 变量 from return ifstream      更新时间:2023-10-16

我有一个方法名称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有什么不同?
ifstream val2 = open_file(val1, "test.cpp");

这将无法编译,因为它试图复制流对象,这是通过创建复制构造函数private(参见此)禁用的。

这样做:

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