提问者:小点点

为什么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版本时,编译时不会出现警告。这是什么原因?


共1个答案

匿名用户

C++11增加了移动构造函数。流现在被移动了。这里的源对象是返回表达式中的临时对象,可以将其移动到main中的st对象。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|返回|ifstream|对象)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?