C++ stringstream inline

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<<的工作很好.

我该如何解决?谢谢!

Jam*_*nze 6

原因是<<运算符是一个成员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.