可以使用临时的字符串流对象吗?

ajb*_*ajb 6 c++ c++11

这有效:

stringstream temp;
temp << i;
result_stream << transform(temp.str());
Run Code Online (Sandbox Code Playgroud)

(transform是一个带a string和返回a 的函数string; i是一个int).但是,我尝试让C++ 11创建一个没有名称的临时对象不起作用:

result_stream << transform((stringstream() << i).str());
Run Code Online (Sandbox Code Playgroud)

我认为它会起作用,因为第二个<<应该只返回第一个参数,我可以使用str()它.但我得到这个错误:

error: 'class std::basic_ostream<char>' has no member named 'str'
Run Code Online (Sandbox Code Playgroud)

我正在使用g ++ 4.8.1(MinGW-W64).

有没有办法实现这一点(即使用未命名的临时代码编写这样的代码)?(上面的代码有点简化,实际代码涉及使用<<int.之外的参数.)

jxh*_*jxh 7

<<临时操作员的结果stringstreamostream.没有str()方法ostream.

to_string改为使用:

result_stream << transform(std::to_string(i));
Run Code Online (Sandbox Code Playgroud)


M.M*_*M.M 7

这不起作用,因为第二个<<std::ostream &operator<<(std::ostream &, int);,所以返回类型ostream&没有成员str().

你必须写:

result_stream << transform( static_cast<stringstream &>(stringstream() << i).str() );
Run Code Online (Sandbox Code Playgroud)


0x4*_*2D2 5

operator<<()返回对std::ostream包含在其中的基类的引用std::stringstream.基类不包含该str()方法.您可以将其强制转换为std::stringstream&:

result_stream << transform(static_cast<std::stringstream&>(std::stringstream() << i).str()); 
Run Code Online (Sandbox Code Playgroud)


How*_*ant 5

试过并且没能为C++ 11做这个(2009年):

http://cplusplus.github.io/LWG/lwg-active.html#1203

无论如何,libc ++都是非法的并且实现了它.

它需要重新考虑,但在2017年之前不可能标准化(标准化是一个冰川过程).