为什么 C++ 允许返回 ifstream 对象?
Why C++ allows returning ifstream object?
在 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 添加了移动构造函数。流现在被移动了。这里的源对象是return表达式中的临时对象,可以移动到main
中的st
对象。
在 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 添加了移动构造函数。流现在被移动了。这里的源对象是return表达式中的临时对象,可以移动到main
中的st
对象。