Boost.NumericConversion 库可用于将一种数字类型的数字转换为另一种数字类型。在 C++ 中,这样的转换也可以隐式发生,如示例 61.1 所示。(该文改进中)
示例 61.1。从 int 到 short 的隐式转换
- #include <iostream>
-
- int main()
- {
- int i = 0x10000;
- short s = i;
- std::cout << s << '\n';
- }
示例 61.1 将编译干净,因为从 int 到 short 的类型转换是自动发生的。但是,即使程序可以运行,转换的结果也取决于所使用的编译器。变量 i 中的数字 0x10000 太大,无法存储在 short 类型的变量中。根据标准,此操作的结果是特定于实现的。使用 Visual C++ 2013 编译,程序显示 0,这与 i 中的值明显不同。
为避免此类问题,您可以使用强制转换运算符 boost::numeric_cast(参见示例 61.2)。
示例 61.2。使用 boost::numeric_cast 进行溢出检测
#include <boost/numeric/c