我正在使用std::stringstream构造一个字符串,然后试图将完成的字符串作为引用传递给一个以std::string&作为参数的函数。
在GCC上编译时出现了一个错误:
../src/so.cpp:22:21: error: invalid initialization of non-const reference of type ‘std::string& {aka std::basic_string<char>&}’ from an rvalue of type ‘std::basic_stringstream<char>::__string_type {aka std::basic_string<char>}’
../src/so.cpp:12:6: error: in passing argument 1 of ‘void myFunc(std::string&)’
make: *** [src/so.o] Error 1
这段代码可以在Windows VS2012上编译通过,但在我的Linux和Android构建中失败了。原因是什么?
我可以通过将ss.str()临时赋值给一个std::string并将该字符串作为引用传递来解决此问题,但这似乎有点愚蠢。有没有更好的正确方法?
#include <iostream>
#include <sstream>
void myFunc (std::string& msg)
{
std::cout << msg << std::endl;
}
int main (void)
{
std::stringstream ss;
ss << "this is a test";
myFunc (ss.str()); // Fails
std::string s = ss.str();
myFunc (s); // Pass
return 0;
}
/W4
,VS会告诉你在那一行使用了非标准扩展。 - Praetorian