【发布时间】:2014-07-06 00:54:37
【问题描述】:
我对以下用于标记字符串的代码有疑问(用空格分隔标记)。
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string s="And I feel fine ...";
istringstream ss(s);
vector<string> tokens{istream_iterator<string>(ss),{}};
for(auto& elem: tokens)
cout << elem << endl;
}
这工作得很好。另一方面,如果我尝试将临时 istringstream 对象传递给
istream_iterator(main 内的第 3 行),如
vector<string> tokens{istream_iterator<string>(istringstream(s)),{}};
我收到一个编译时错误
error: no matching conversion for functional-style cast from 'istringstream' (aka 'basic_istringstream<char>') to 'istream_iterator<string>'
我相信这是因为我无法将临时右值绑定到非常量左值引用,而istream_iterator 的构造函数将引用作为参数。有没有办法从临时构建一个istream_iterator<string>?我也不能在临时对象上使用std::ref...
谢谢!
【问题讨论】:
标签: c++ iterator istringstream