Stu*_*789 2 c++ constructor istream-iterator
g ++允许从ifstream实例构造istream_iterator:
std::ifstream ifstr("test.txt");
std::istream_iterator<std::string> iter1(ifstr);
Run Code Online (Sandbox Code Playgroud)
...但它不允许使用未命名的临时构造:
std::istream_iterator<std::string> iter2(std::ifstream("test.txt"));
Run Code Online (Sandbox Code Playgroud)
这给出了:
错误:没有用于调用'std :: istream_iterator,ptrdiff_t> :: istream_iterator(std :: ifstream)'的匹配函数
有谁知道为什么这不起作用?- 谢谢!
它没有,因为istream_iterator的构造函数参数是非const引用,但是你提供了一个临时的.您不能向非const引用提供临时值(即rvalues).
但除此之外,即使它需要一个const引用,它仍然无法工作,因为ifstream它不可复制.奇怪的是,C++需要一个可访问的复制构造函数来将rvalue绑定到非const引用.
| 归档时间: |
|
| 查看次数: |
449 次 |
| 最近记录: |