这个有效:
stringstream temp;
temp << i;
result_stream << transform(temp.str());
( transform
是一个接受 string
并返回 string
的函数;i
是一个 int
)。然而,我试图让 C++11 创建一个没有名字的临时对象并没有奏效:
result_stream << transform((stringstream() << i).str());
我认为它会起作用,因为第二个<<
应该只返回第一个参数,我就可以使用 str()
在那上面。但是我得到这个错误:
error: 'class std::basic_ostream<char>' has no member named 'str'
我正在使用 g++ 4.8.1 (MinGW-W64)。
有没有办法做到这一点(即使用未命名的临时文件编写这样的代码)? (上面的代码有点简化,实际代码涉及对 <<
以外的参数使用 int
。)
最佳答案
这不起作用,因为第二个 <<
是std::ostream &operator<<(std::ostream &, int);
所以返回类型是ostream&
没有成员str()
.
你必须写:
result_stream << transform( static_cast<stringstream &>(stringstream() << i).str() );
更新(2019 年):根据 LWG 1203将来可能会更改标准(并且已经有一个主要实现),因此该代码不再有效,而更简单的代码可以代替。 See this question详细信息。
在过渡期间,显然以下工作适用于新旧:
result_stream << transform( static_cast<stringstream &>(stringstream().flush() << i).str() );
// ^^^^^^^^
这不应该是性能损失,因为刷新空流没有效果...
关于c++ - 可以使用临时的 stringstream 对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27391205/