从 int|double 到 string 的转换的简洁 C++ 习语是啥? [复制]

Posted

技术标签:

【中文标题】从 int|double 到 string 的转换的简洁 C++ 习语是啥? [复制]【英文标题】:what's concise C++ idiom for conversion from int|double to string? [duplicate]从 int|double 到 string 的转换的简洁 C++ 习语是什么? [复制] 【发布时间】:2013-08-26 11:39:23 【问题描述】:

通过相关的问答,似乎转换为字符串的最佳 C++ 实践是

ostringstream stringStream;
stringStream << input_value;        // let's say, input_value is a double
output_string = stringStream.str();

有没有什么方法可以在不到三行干净的 C++ 中达到同样的效果?

【问题讨论】:

***.com/questions/5590381/… 和 ***.com/questions/332111/… 的副本 把上面三行放在一个函数里,就只需要一行。 感谢您提供许多有用的答案!看来我只能接受一个,这将是一个任意的选择,对不起。 【参考方案1】:

使用std::to_string 系列函数:

std::string s = std::to_string(3.1416);

如果您没有所需的 C++11,另一种选择是 boost::lexical_cast

std::string s = boost::lexical_cast<std::string>(3.1416);

【讨论】:

【参考方案2】:

是的,std::to_string:

output_string = std::to_string(input_value);

(对于 C++03,请查看 boost::lexical_cast)。

【讨论】:

请注意这是C++11 功能【参考方案3】:

如果你没有 C++11,你可以使用类似的东西:

boost::lexical_cast<std::string>(input_value);

(如果您不想要 Boost,编写自己的 to_string 很容易 - 您实际上只是将现有代码包装在一个函数中)。

如果您确实拥有 C++11,请坚持使用前面提到的 std::to_stringJesse Good 和 juanchopanza。

【讨论】:

boost 不是标准 C++ 的一部分。并且将所有内容包装在一个隐藏所有内容的函数中总是可以由任何人完成,但是......它并不能解释任何事情 to_stringlexical_cast 是函数 - 有什么区别? to_string 和 std::stringstream 是 C++ 标准的一部分。升压不是。如果我们承认采用其他地方交付的功能,我们就是在玩不同的游戏。【参考方案4】:

两者都是 C++ 11 中的单行代码:

std::string s1 = std::to_string(42);

std::string s2 = std::to_string(42.0);

【讨论】:

以上是关于从 int|double 到 string 的转换的简洁 C++ 习语是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥这种从 int 到 double& 的转换不起作用?

int/long long/double 转换成 string的方法

从具体化的“System.Int32”类型到“System.Double”类型的指定转换无效

在C#中如何将int类型强制转换为double类型

从 double 到 const int 的 C++ 类型转换无法正常工作

在QT中如何将double转换为Qstring