c++ - std::ostringstream 的问题

标签 c++

我试图通过将代码 #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/

相关文章:

c++ - 如何在c中使用socket编程保存图像数据

C++:使用指向数组的指针

c++ - 在 C++ 和 Oracle 数据库之间传递数据时的浮点精度问题

c++ - 你能解释一下这个 C++ 删除问题吗?

c++ - 避免默认参数异常

c++ - 匹配的旋律

C++ 从另一个类调用方法

c++ - 使用 Visual C++ 将二维数组 int[n][m] 写入 HDF5 文件

c++ - 如何在 Qt DBus 调用中从 QDBusMessage 中提取返回的数据?

c++ - C++ 中的 Google Protocol Buffer : Creating a message from an existing struct