getline 如何在此代码中工作
how getline works in this code
int function1(string data){
stringstream ss(data);
return function2(ss);
}
int function2(stringstream& ss){
string val;
getline(ss,val,',');
return stoi(val);
}
如果我将 function2 更改为
int function2(stringstream ss){...}
没用。我想知道为什么?
编译错误是
删除函数的使用'std::basic_stringstream<_CharT, _Traits, _Alloc>::basic_stringstream(const std::basic_stringstream<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator]'
另一个问题是我很好奇 getline 的实际工作原理。喜欢下面的代码:
while(!getline(ss,val,','))
cout<<val;
getline如何在一次迭代后跟踪迭代器的位置?
定义 int function2(stringstream ss)
需要在 stringstream
上使用已删除的复制构造函数。 stringstream
删除了复制构造函数和复制赋值运算符。 streamstream
允许移动。
getline()
不跟踪流。 stringstream
的 class 定义源自 streambuf
,它负责此 minutiae/details。
由于您尝试复制 ss
流,并且使用(相对)新的 C++ 语法删除了复制方法,因此发生了错误。
你不允许复制流,所以你想把它给一个函数,你必须使用引用。
您可以找到一些关于
的信息
int function1(string data){
stringstream ss(data);
return function2(ss);
}
int function2(stringstream& ss){
string val;
getline(ss,val,',');
return stoi(val);
}
如果我将 function2 更改为
int function2(stringstream ss){...}
没用。我想知道为什么? 编译错误是
删除函数的使用'std::basic_stringstream<_CharT, _Traits, _Alloc>::basic_stringstream(const std::basic_stringstream<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator]'
另一个问题是我很好奇 getline 的实际工作原理。喜欢下面的代码:
while(!getline(ss,val,','))
cout<<val;
getline如何在一次迭代后跟踪迭代器的位置?
定义 int function2(stringstream ss)
需要在 stringstream
上使用已删除的复制构造函数。 stringstream
删除了复制构造函数和复制赋值运算符。 streamstream
允许移动。
getline()
不跟踪流。 stringstream
的 class 定义源自 streambuf
,它负责此 minutiae/details。
由于您尝试复制 ss
流,并且使用(相对)新的 C++ 语法删除了复制方法,因此发生了错误。
你不允许复制流,所以你想把它给一个函数,你必须使用引用。
您可以找到一些关于
的信息