c – 为什么boost :: format不能直接转换成std :: string?

以下是不可能的:
std::string s = boost::format("%d") % 1; // error

你必须明确地调用str()方法

std::string s = (boost::format("%d") % 1).str(); // OK

它只是语法糖,但为什么不加入转换?

解决方法

如果隐式转换可以抛出异常,这不是一件好事.转换为字符串将认抛出一个异常,如果较少的参数被馈送到格式比所需的.
例如.
std::string f()
{
   boost::format fmt("%d");
   // forgot to Feed an argument
   std::string s = fmt;  // throws boost::io::too_few_args
   widget.set_title( fmt );  // throws boost::io::too_few_args
   return fmt;  // throws boost::io::too_few_args
}

这种隐式转换使得很难发现和分析可能引发异常的代码部分.但是,明确的.str()调用提供了一些这样的可能的异常,这样可以在确保周围的代码的异常安全性的同时更容易,以及(在这种特殊情况下)暗示要重复检查前面的代码以防止发生异常第一名.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...