我试图通过将代码 #1 更改为代码 #2 来使代码 #1 更简洁,但它没有按预期工作。谁能告诉我为什么它不起作用?谢谢。
代码#1
double x = 8.9, y = 3.4, z = -4.5;
std::ostringstream q0;
q0 << "(" << x << "," << y << "," << z << ")";
std::string s = q0.str();
代码#2
double x = 8.9, y = 3.4, z = -4.5;
std::string s = static_cast<std::ostringstream &>(
std::ostringstream() << "(" << x << "," << y << "," << z << ")").str();
最佳答案
我已经转载了你的垃圾。我唯一能想到的是你的静态转换无效。这对我来说真的很奇怪,但这是我认为可能发生的唯一事情。可能是 op<< 返回了 ostringstream 以外的东西,它不能转换为 ostringstream ...就像某种引用流。事实上,当将引用分配给变量并在调试器中查看类型时,ostringstream 看起来很奇怪。
无论如何,没有理由“简洁”。事实上,对于必须阅读您的代码的其他开发人员来说,简洁通常很烦人。如果你想“简洁”,把你的东西放在一个返回字符串的函数中,并给它命名一些有用的东西。
编辑:
其实,我想我可能有更好的答案。您将非常量引用绑定(bind)到临时对象并在其上调用函数。 const 引用保证继续存在,直到“声明”结束(现在忘记了技术术语,但它很接近)。非常量引用没有此保证。因此,我认为当您在此非常量引用上调用 str() 时,您会引发未定义的行为,因为编译器可以自由删除它引用的临时对象。
关于c++ - std::ostringstream 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2539388/