我们为什么要通过引用C ++中的函数来传递文件?

时间:2016-04-19 17:16:48

标签: c++ function file pointers reference

我所拥有的是使用函数连接两个文件的任务。所以我想要做的是:

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

void concatenateFiles(ifstream fileA, ifstream fileB, ofstream fileAB){
   ...
}

但我一直有一个我无法理解的错误。所以我改为:

...

void concatenateFiles(ifstream &fileA, ifstream &fileB, ofstream &fileAB){
   ...
}

它有效,但我不完全确定原因。我想这与无法访问文件有关,除非它们是通过引用传递的。也许C ++不能制作文件的副本,就像它不会通过引用传递其他变量的副本一样?这是我能得到的。这是我的第一个编程课程,所以如果你们能够尽可能简单地保持答案,那就太棒了!

谢谢,拉米。

2 个答案:

答案 0 :(得分:2)

std::ifstream(和其他流类)没有实现复制构造函数(这是正确的)。在C ++ 11及更高版本中,甚至通过= delete显式禁用了编译器的默认复制构造函数。因此,您无法通过值将std::ifstream对象传递给参数,而只能通过引用将传递给

答案 1 :(得分:2)

你不能这样做,因为按值传递需要一个复制构造函数。但是,复制构造函数为std::basic_istream级别basic_istream(const basic_istream& rhs) = delete; *

delete

另一方面,通过指针或引用传递不需要复制构造函数,因此允许使用。

* 在C ++ 11中引入private功能之前,构造函数是QWidget.setCursor (self, QCursor)