我想理解为什么写这个
static_cast<std::ostringstream*>( &(std::ostringstream() << speed.x) )->str();
创建一个字符串,但不是
(std::ostringstream() << speed.x).str();?
实际上后者甚至没有编译......
我发现这个static_cast<foo*>&foo
非常奇怪。
你能给我一些很好的例子吗?在这种情况下这样做是好的做法吗?
答案 0 :(得分:0)
表达式std::ostringstream() << speed.x
实际上调用底层基类operator<<(double)
接口上的std::ostream
。
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();
}