我发现自己必须使用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();
}
该功能似乎工作正常,但我的问题是:这种方法是否有任何(坏的)内存影响,即。我是在分配不必要的记忆,还是留下什么“晃来晃去”?
谢谢你们 皮特
答案 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。
除此之外你的代码还不错。