如何通过引用传递从stringstream检索的字符串?

时间:2014-07-29 07:11:23

标签: c++ stringstream

我有以下功能

void myfun(std::string &str);

我正在调用此函数:

stringstream temp("");
temp << "some string data" ;
myfun(temp.str());

但我收到了以下错误:

 error: no matching function for call to ‘myfun(std::basic_stringstream<char>::__string_type)’

no known conversion for argument 1 from ‘std::basic_stringstream<char>::__string_type {aka std::basic_string<char>}’ to ‘std::string& {aka std::basic_string<char>&}’

如何通过引用传递此字符串?

2 个答案:

答案 0 :(得分:4)

为什么你需要这个?为什么myfun会收到引用,而不是conststd::stringstream::str返回std::string,即临时对象,无法绑定到lvalue-reference。 您可以将副本发送到功能

std::string tmp = temp.str();
fun(tmp);

如果您不想修改功能str中的fun,可以将其重写为

void myfun(const std::string& str)

答案 1 :(得分:2)

str按值返回,即temp中内部字符串的副本。您无法通过非const引用传递副本。

您可以将功能签名修改为:

void myfun(const std::string &str);