【发布时间】:2018-08-17 16:38:56
【问题描述】:
我使用std::ostringstream 格式化字符串,它从ostream 继承其<< 运算符,因此它们返回ostream 而不是ostringstream,这意味着我不能调用ostringstream::str结果上。这通常不是问题,因为我通常可以这样做:
ostringstream stream;
stream << whatever;
string str = stream.str();
但有时我需要*在一个表达式中使用它,这比较困难。我可以的
string str = ((ostringstream&) (ostringstream() << whatever)).str();
但如果 << 重载返回一些不是 ostringstream 的 ostream,就会发生不好的事情。我唯一能想到的其他事情就是
string str = ([&] () -> string {ostringstream stream; stream << whatever; return stream.str();})();
但这不可能是高效的,而且肯定是非常糟糕的 c++ 代码。
*好吧,我不需要,但是这样会方便很多。
【问题讨论】:
-
如果该重载返回的不是它所提供的流,我会认为它完全损坏并丢弃它。
-
@molbdnilo 除非
whatever是(或包括)出于某种原因应该这样做的操纵者。 -
@Justin 这是一个成语,说明这种语言有些不讨人喜欢。
-
@Anonymous Manipulators 更改正在作用的流对象听起来仍然很糟糕。
标签: c++ ostringstream