Conversion 总结

在这一章里,你学习了 Boost.Conversion 库,从 polymorphic_cast开始。polymorphic_cast 的基本原理是代码的清晰性和安全性,它使我们在代码中更灵活地表达我们的意图,还有安全性,与它的竞争者 dynamic_cast<T*>相比它更为安全,因为对结果指针的测试很容易忘记。

接着,你看到了安全的优化,使用 polymorphic_downcast, 它在调试模式下增加了类似于dynamic_cast的安全性,但却是使用 static_cast 来进行转换。这样比单独使用 static_cast 更安全。

numeric_cast 帮助你避免数值转换中的某些困难。还有,代码的清晰性也得到提高,从而避免了未定义的行为以及实现定义的行为。

最后一个是 lexical_cast. 没有重复的转换函数。这就是为什么它被提议纳入下一个版本的C++标准库的原因。它是一个非常小巧的、用于转换不同的可流数据类型的工具。

如果你曾经看到过这些转型的实现,你会同意它们之间没有一个是复杂的。还有,它具有它们所需的洞察力、远见和知识,并正确地、可移植地、高效地实现了它们。不是所有人都认识到使用dynamic_cast时会发生某些错误。不是很多人都知道整数类型转换和提升的复杂规则。Boost提供的转换操作包含了所有这些知识,并具有良好的设计和测试;它们是你所要的最好的选择。