我想知道为什么要写这篇文章
static_cast<std::ostringstream*>( &(std::ostringstream() << speed.x) )->str();生成一个字符串,但不是这个
(std::ostringstream() << speed.x).str();?事实上,后者甚至不会编译...
我发现这个static_cast<foo*>&foo非常奇怪。
你能给我举个很好的例子,在这种情况下这样做是很好的做法吗?
发布于 2017-09-30 19:22:04
表达式std::ostringstream() << speed.x实际调用底层基类std::ostream接口上的operator<<(double)。
std::ostream::operator<<(double)的返回类型是std::ostream&,这意味着您正在尝试调用成员函数std::ostream::str(),这个函数当然不存在。该方法位于派生类上。
这就是为什么static_cast在这个用例中是必要的。
你也可以这样写:
static_cast<std::ostringstream&>(std::ostringstream() << speed.x).str();或者从c++11开始
std::to_string(speed.x);或者在以前的版本中,您可以编写自己的、不太复杂的函数,它将以一种更易维护的方式做同样的事情,而不会产生任何开销。
std::string to_string(double x)
{
std::ostringstream ss;
ss << x;
return ss.str();
}https://stackoverflow.com/questions/46501030
复制相似问题