为什么C++允许返回ifstream对象?

在 C++98 中,以下代码无法编译,因为 ifstream 没有复制构造函数:

#include <iostream>
#include <fstream>
using namespace std;

ifstream f() {
    return ifstream("main.cpp");
}

int main() {
    ifstream st= f();
}

但是,在 C++11 中使用多个 GCC 版本时,编译时不会发出警告。这是什么原因?

回答

C++11 添加了移动构造函数。流现在被移动了。这里的源对象是在返回表达,其可移动到一个临时st的物体main


以上是为什么C++允许返回ifstream对象?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>