🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## Utility 库如何改进你的程序? * 编译期断言 `BOOST_STATIC_ASSERT` * 安全的析构 `checked_delete` 和 `checked_array_delete` * 禁止复制 `noncopyable` * `operator&`被重载时用 `addressof`取得对象地址 * 用`enable_if` 和 `disable_if`控制重载与特化 有些工具还不够组成它们自己的库,因此它们与其它实体被集合到一起。这就形成了 Boost.Utility,收集了一些没有更合适地方存放的、有用的工具。它们很有用,应该被加入到Boost,但它们又太小,不足以形成自己的库。本 章介绍Boost.Utility中最基本的以及最广泛使用的工具。 我们将从 `BOOST_STATIC_ASSERT`开始,它是一个在编译期判断整型常量表达式的工具。然后,我们看看当你通过一个指向不完整类型的指针`delete`对象时,即当被删除的对象的内存布局未知时,会发生什么。`checked_delete` 使得这个讨论更为有趣。我们还会看到 `noncopyable` 如何防止一个类被复制,这也是本章最重要的主题。然后我们将看到 `addressof`, 它用于阻止那些重载了`operator&`的险恶的程序员\[1\]的病态行为。最后,我们将测试 `enable_if`, 它非常有用,可用于在名字查找时控制函数重载与模板特化是否被考虑。 > \[1\] 如果你认为我说的不对,请把你认为最合理的重载了`operator&`的用例发给我。