ElO*_*mmy 6 c++ stl stringstream
我想std::stringstream用来创建格式化的字符串,但使用内联类,所以我没有stringstream局部变量飞来飞去.我的意思是:
#include <iostream>
#include <ostream>
#include <string>
#include <sstream>
int main(int argc, char* argv[])
{
std::string test = ((std::ostringstream&)
(std::ostringstream("") << "This is a test: " << 50.1 << "abc")
).str();
std::cout << test << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这在GCC中编译很好,但输出如下:
"0x401d0a50.1abc"
因此,似乎stringstream将第一个字符串视为指针并输出地址.随后operator<<的工作很好.
我该如何解决?谢谢!
原因是<<运算符是一个成员void const*,但是一个自由函数std::ostream&作为左手参数char const*.您std::ostringstream( "" )是临时的:您可以在其上调用成员函数(甚至非const成员函数),但临时不能用于初始化全局函数的非const引用.
编辑:
两点:首先,正如已经指出的那样,如果你指定的话,g ++会做你想要的-std=c++11.正如TC指出的那样,这在第27.7.3.9节中规定,它为所有人提供了模板重载,<<并为std::istream
参数提供了右值参考.其次,经典的工作是开始表达std::ostringstream( "" ).flush() <<.... flush是一个成员函数(因此可以在临时调用)返回一个std::ostream&(所以其他所有链都很好); 它也没有任何作用std::ostringstream.