c++ - 可以使用临时的 stringstream 对象吗?

标签 c++ c++11

这个有效:

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/

相关文章:

c++ - std::vector Reserve() 的未定义行为

C++ SDL初始化所有内容并出现运行时错误

c++ - 使用 OpenMP 在 C++11 中并行构造距离矩阵

在用户插入的字符串的每个元音后插入一对字符的 C++ 代码

c++ - 为指向集合的指针重载开始/结束是个好主意吗

c++ - make_shared 与自定义新运算符

c++ - 从左侧 QT 调整窗口大小时闪烁

c++ - C++ 最快 `finally`

android - Android 的 c++11 多线程问题,其中某些线程未正确安排

function - C++11:为什么 result_of 可以接受仿函数类型作为 lvalue_reference,但不能接受函数类型作为 lvalue_reference?