使用ostringstream语法将double转换为字符串

时间:2017-09-30 08:33:07

标签: c++ syntax ostringstream

我想理解为什么写这个

static_cast<std::ostringstream*>( &(std::ostringstream() << speed.x) )->str();

创建一个字符串,但不是

(std::ostringstream() << speed.x).str();?
实际上后者甚至没有编译......

我发现这个static_cast<foo*>&foo非常奇怪。

你能给我一些很好的例子吗?在这种情况下这样做是好的做法吗?

1 个答案:

答案 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();
}