【发布时间】:2015-01-14 17:42:54
【问题描述】:
跟进https://stackoverflow.com/a/1120224/390066。
为什么我不能使用
getline(stringstream(line),cell,','){}
而不是
stringstream lineStream(line);
getline(lineStream,cell,','){}
?
更新
我应该澄清一下我想在循环中使用 getline。
此外,我还应该注意到,我最初的意图是使用 getline 逐行读取文件,并使用新 getline 中的行来划分',',这在 imo 上更直观。
据我目前的理解,getline 并不是为此而设计的,因为它需要一个非常量输入并给出 const 令牌;因此,getline 不能盲目递归。
【问题讨论】:
-
getline 会更改一些临时对象,该对象将始终保持不变。
-
将值存储在临时变量中是否有任何意义...
-
定义
template <typename T> T & stay(T && x) { return x; }并尝试:std::getline(stay(std::istringstream(line)), cell, ',')。 -
@KerrekSB Neat,除了名称:-),这表明它以某种方式延长了临时的生命周期。 (
flush()的使用是神圣的习语,虽然我也不会说它特别透明。但它确实适用于 C++11 之前的版本。) -
@JamesKanze:
stay是move的反义词。两者都没有真正改变事物的位置 :-) 也许它们应该重命名为std::value_category_cast!
标签: c++ stream getline default-constructor