c – 为什么boost :: format不能直接转换成std :: string?
发布时间:2020-12-16 03:22:35 所属栏目:百科 来源:网络整理
导读:以下是不可能的: std::string s = boost::format("%d") % 1; // error 你必须明确地调用str()方法: std::string s = (boost::format("%d") % 1).str(); // OK 它只是语法糖,但为什么不加入转换? 解决方法 如果隐式转换可以抛出异常,这不是一件好事.转换为
以下是不可能的:
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()调用提供了一些这样的可能的异常,这样可以在确保周围的代码的异常安全性的同时更容易,以及(在这种特殊情况下)暗示要重复检查前面的代码以防止发生异常第一名. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |