gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:02:42 26 4
gpt4 key购买 nike

这个有效:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com