c++ - 我应该什么时候使用 Boost 的 lexical_cast?它是不得已的机制吗?

标签 c++ boost idioms lexical-cast

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

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

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

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

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

最佳答案

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

简而言之:它不是一种最后手段机制。它也不是 end-all-be-all 解决方案。


背景

  • 一个普遍的反对意见是 lexical_cast 会很慢。这种情况很少(不再),因为它专门用于常见的基本类型
  • lexical_cast 接口(interface)只适用于解析永远不会/很少失败的情况;否则更喜欢无一异常(exception)地报告输入验证错误的界面

关于c++ - 我应该什么时候使用 Boost 的 lexical_cast?它是不得已的机制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24863080/

相关文章:

c++ - 如何从 Boost::GIL View 类型中提取 channel 类型?

c++ - g++ 编译器如何包含 boost::regex

c++ - Boost 库缺少 'libboost_date_time-vc90-mt-gd-1_44.lib 文件。如何使用 bjam 只构建这个 lib 文件?

scala - 惯用Scala遍历所有子字符串

c++ - 运算符重载代码编译错误,模板参数推导/替换失败

c++ - 指针共享习语

c++ - 链式 static_cast 如何定义明确?

c++ - 我需要访问一个小文本文件的完全随机行,并在 C++ 中的另一个文本文件中导入同一行

Haskell:想要更好的做事方式:value == x ||值 == y ||

c++ - 如何命名这种面向 key 的访问保护模式?