std :: ostringstream的问题

Don*_*ony 0 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();
Run Code Online (Sandbox Code Playgroud)


代码#2

double x = 8.9, y = 3.4, z = -4.5;
std::string s = static_cast<std::ostringstream &>(
  std::ostringstream() << "(" << x << "," << y << "," << z << ")").str();
Run Code Online (Sandbox Code Playgroud)


Edw*_*nge 7

我已经复制了你的垃圾.我唯一能想到的是你的静态演员是无效的.这对我来说似乎很奇怪,但这是我能想到的唯一可能发生的事情.可能是op <<返回的东西不是ostringstream,不能转换为ostringstream ......就像某种类型的引用流一样.实际上,在为变量分配引用并查看调​​试器中的类型时,对于ostringstream来说它看起来很奇怪.

无论如何,没有理由"简洁".实际上,对于需要阅读代码的其他开发人员而言,简洁通常非常烦人.如果你想成为"简洁",那就把你的东西放在一个函数中,该函数返回一个字符串并将其命名为有用的东西.

编辑:

实际上,我想我可能会有更好的答案.您将非const引用绑定到临时并在其上调用函数.保证const引用继续存在直到"语句"结束(现在忘记技术术语但它已经关闭).非const引用没有此保证.因此,当您在此非const引用上调用str()时,我认为您正在引发未定义的行为,因为编译器可以自由删除它引用的临时值.