将double转换为字符串函数 - 内存问题?

时间:2013-04-20 06:41:50

标签: c++ double stdstring memory-efficient

我发现自己必须使用std :: cout各种双变量。 我已经创建了一个简单的函数来将double转换为std :: string,然后我可以将它与std :: cout等一起使用。

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

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

谢谢你们 皮特

3 个答案:

答案 0 :(得分: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
} 

此外,您可以直接将double传递给cout

答案 1 :(得分: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

示例用法位于此link

另外,正如其他人所说,任何地方都没有记忆。另外,我想提一下,因为你只是写一个字符串流,所以你应该使用std::ostringstream进行(1)当人们阅读你的代码时的进一步说明和(2)使用&gt;的错误; &GT;而不是&lt;&lt;

答案 2 :(得分:1)

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

cout << x; 

可以正常工作

cout << dtos(x); 

如果您想将其他原因更改为double,那么您可以使用C ++ 11中的std::to_string

除此之外你的代码还不错。