什么时候应该使用Boost的lexical_cast?这是最后的机制吗?

时间:2014-07-21 10:37:41

标签: c++ boost idioms lexical-cast

Boost' lexical_cast,它将数字(或任意对象)转换为字符串并返回。我应该尝试更多地使用它,而不是将内容流式传输到std::stringstream s?或者它更像是一种最后手段?

这是两种替代方法的一个例子:

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

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

(但请注意我的问题更为一般)。

2 个答案:

答案 0 :(得分:1)

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

简而言之:它是最后的机制。它也不是 end-all-all-all 解决方案。


背景

  • 一个常见的反对意见是lexical_cast会很慢。这种情况很少发生(因为它专门用于常见的原始类型)
  • lexical_cast的接口仅适用于解析不应该/很少失败的情况;否则更喜欢报告输入验证错误而无异常的接口

答案 1 :(得分:0)

我会说你在将字符串转换为数字时应该总是使用lexical_cast,因为没有它你就不会知道它是否真的是一个数字(错误的词法转换异常)。字符串流不会抛出任何内容并使数字保持未初始化状态。