为什么 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对象。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...