1

我发现自己不得不 std::cout 各种双变量。我制作了一个简单的函数来将双精度转换为 std::string,然后我可以将其与 std::cout 等一起使用。

// Convert a double to a string.
std::string dtos(double x) {
    std::stringstream s;
    s << x;
    return s.str();
}

该功能似乎工作正常,但我的问题是:这种方法是否有任何(坏)记忆影响,即。我是在分配不必要的内存,还是留下任何“悬空”的东西?

谢谢大家皮特

4

3 回答 3

2

不,你的代码是可以的,阅读代码上的注释:

std::string dtos(double x) {
    std::stringstream s;  // Allocates memory on stack
    s << x;
    return s.str();       // returns a s.str() as a string by value
                          // Frees allocated memory of s
} 

另外,你可以直接传递一个doubleto cout

于 2013-04-20T06:44:24.010 回答
2

很惊讶没有人提到这一点,但是您可以使用模板将该算法概括为任何类型。

像这样:

template<typename T>
std::string to_string(const T& obj)
{
    std::ostringstream s;
    s << obj;
    return s.str();
}

这样您就可以轻松地转换为字符串,如下所示:

int x = 5;
to_string(x); // will convert the integer to a string

to_string(32); // constants works
to_string<double>(302); // you can explicitly type the type you wish to convert

示例用法在此链接上。

此外,正如其他人所说,没有记忆可以去任何地方。另外,我想提一下,由于您只是在写入字符串流,也许您应该使用std::ostringstream来(1)当人们阅读您的代码时进一步澄清和(2)使用 >> 没有错误<<

于 2013-04-20T08:10:58.537 回答
1

您不必将双打更改为字符串即可使用std::cout

cout << x; 

可以正常工作

cout << dtos(x); 

如果您出于其他原因想将 double 更改为字符串,那么您可以在 C++11 中使用std::to_string 。

除此之外,您的代码很好。

于 2013-04-20T06:47:43.270 回答