为什么我不能在C ++ 11中使用临时ifstream?

时间:2014-08-12 13:42:56

标签: c++ c++11 iostream rvalue

为什么我必须在以下代码中声明命名变量file

#include <iostream>
#include <fstream>

using namespace std;

int main(int const argc, char const * const * const argv) {
        string head1;
        ifstream file {argv[1]};
        getline (file, head1);
        cout << head1 << endl;
}

如果我尝试

getline (ifstream(argv[1]), head1)

我得no known conversion for argument 1 from ‘std::ifstream {aka std::basic_ifstream<char>}’ to ‘std::basic_istream<char>&’或类似(gcc 4.6,4.8或clang 3.3)。

我不明白,因为根据cplusplus.com有一个定义

istream& getline (istream&& is, string& str);

并且我不明白为什么无法进行转换(临时可以用作右值,而istreamifstream的基类)。

0 个答案:

没有答案