2

Boostlexical_cast将数字(或任意对象)转换为字符串并返回。我应该尝试更多地使用它,而不是流式传输到std::stringstreams 吗?或者它更像是一种最后手段的机制?

以下是两种替代方法的一个示例:

std::stringstream message;
message << "foo " << bar << ' ' << baz;
doSomething(message.str());

或者

doSomething("foo " + lexical_cast<string>(bar) + " " + lexical_cast<string>(baz));

(但请注意我的问题更笼统)。

4

2 回答 2

1

词法转换不会“大部分”转换数字。它是任何文本流式传输的机制。是的,这取决于。我自由地使用 lexical_cast,但我会根据用例毫不犹豫地使用 std::stoi、std::to_string、Boost {Spirit|Format|Serializaton}。

简而言之:这不是最后手段。这也不是万能的解决方案。


背景

  • 一个普遍的反对意见是 lexical_cast 会很慢。这种情况很少(不再),因为它已专门用于常见的原始类型
  • lexical_cast 接口仅适用于解析永远不会/很少失败的情况;否则更喜欢无异常报告输入验证错误的接口
于 2014-07-21T10:49:30.963 回答
0

我会说在将字符串转换为数字时应该始终使用 lexical_cast,因为没有它你将不知道它是否真的是一个数字(坏词法转换异常)。字符串流不抛出任何东西,并使数字未初始化。

于 2014-07-21T10:42:39.940 回答