如果我不使用引用,为什么这个代码不会编译?

时间:2015-12-12 21:02:41

标签: c++ reference

我有一个在std::ifstream上运行的功能:

#include <fstream>

void handle(std::ifstream file) {
  // Do things
}

int main() {
  std::ifstream file("x.txt");
  handle(file);
}

此代码给出了this错误。

但是,如果我将handle的单个参数作为引用(void handle(std::ifstream& file),则代码会在没有警告的情况下编译。

为什么?

1 个答案:

答案 0 :(得分:3)

参数是传递的值,这需要复制参数 但是std::ifstream不提供复制构造函数。

来自here

ifstream (const ifstream&) = delete;