C++ std::ostringstream的问题

C++ std::ostringstream的问题,c++,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(); double x=8.9,y=

我试图通过将代码#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();
double x=8.9,y=3.4,z=-4.5;
标准:ostringstream q0;

q0您可能想使用本文提供的代码。

我复制了您的垃圾。我能想到的唯一一件事是你的静态演员阵容无效。这对我来说真的很奇怪,但这是我能想到的唯一可能发生的事情。可能是我刚才问的op。答案解释了为什么您所做的不起作用(您可能会遇到编译时错误或像我一样将字符串打印为十六进制地址),以及如何解决它(Johannes Schaub使用
getlval()
)发布了一个非常好的解决方法)。

如果您可以访问,以下内容可以被认为更“简洁”


cout一些
ostream
操作符您已经找到了上面提到的“为什么”的答案


一个简单的建议是,你可以用
ostringstream().flush()
替换
ostringstream()
,让你的东西正常工作。这使得结果有资格引用到非常量绑定。

@SLaks:我不明白你的意思。@Dony:你想要的结果是什么,实际发生的情况是什么?因为他们认为这个问题不清楚或没有用处。他们可能认为问题不清楚的一个原因是,您根本没有描述程序的行为,因此不清楚您希望它做什么。此外,问题的标题远不是描述性的。你问过乔恩·斯基特吗?():-)做一些更简洁的东西永远不应该是一个目标。。。我将把这个片段包含到我的util中。。。谢谢@模糊:这篇文章虽然有用,但并没有回答我的问题。我认为这两个答案都不正确。我尝试了dynamic_cast,但它没有抛出或更改输出。我尝试了const&它也没有改变任何东西。如果不知道您遇到了什么,可能只是一个编译器错误。不过我的建议是正确的。暂时的优化对我来说是有意义的。如果您执行下面的代码并在堆上进行分配并执行内存泄漏,则不会出现错误。std::string s=static_cast(*(新std::ostringstream())你可能是对的,但在查找了临时生存期的规则之后,我认为编译器不能随意这么做。优化某些内容不应该改变定义良好的行为。如果,正如我所认为的,语句定义良好,那么这将是一个编译器错误。临时生存期将一直持续到完整表达式的末尾sion,在本例中是分号,在复制字符串之后。代码中没有生存期问题。我在输出中得到十六进制地址。约翰尼斯建议的解决方法似乎有效,但我仍然有兴趣知道为什么我尝试的方法无效。@Dony:Tronic对AshleysBrain问题的回答,特别是Tronic在其回答下面的评论,提供更多关于代码不工作原因的详细信息。它不能将临时
ostringstream
传递到
ostream&operator。为了繁荣,您应该包括您在自己的帖子中提到的答案。这似乎更像是一个评论而不是答案。
double x = 8.9, y = 3.4, z = -4.5;
std::string s = static_cast<std::ostringstream &>(
  std::ostringstream() << "(" << x << "," << y << "," << z << ")").str();
cout << boost::format("writing %1%,  x=%2% : %3%-th try") % "toto" % 40.23 % 50;
ostream& operator<<(ostream& os, T const&);