第3条 字符串格式化的“动物庄园”之二:标准的(极度优雅的)替代方案
方案一、snprintf
这看上去是最简单的替代方案,给出的这个长度,可以有效限制buf的溢出。长度输入错误?出现这种事情自己检讨。比较来说,永远不要用sprintf,这好像有点残酷,不过snprintf其实是一回事。类似的情况还有很多,在这里就不赘述了。
方案二、std::stringstream
相对而言,我对流的格式化操作很怵,我认为我的根源在于对string及其它C++流的不信任,对我觉得他们都可能存在多线程问题。我不认为目前大多数的实现很好的解决了这个问题。长度安全性,类型安全性和模板亲和力是它的优点。
方案三、std::strstring
这似乎是一个不受标准委员会喜欢的成员,虽然不用为它的生命周期担心。它似乎提供了非常大的灵活性,这似乎才是不被喜欢的根本原因。它为自有缓冲和外来缓冲提供了不同的策略,这太过灵活,我想可能有些人会无所适从,也许很多bug由此而来,我想这不是一个贴切于初学者的类。
方案四、boost::lexical_cast
Boost是即将成为下一代C++的标准,提前做出研究是很有必要的。这是个优雅的解决方案,将一种格式的流转化成另一种格式的流。
总结来说:对我来说,效率是最重要的事情,如果让我来选,我当然首选snprintf,其它的对我来说消耗太大了,超过了数量级,这未免有些太夸张了。