如何安全地从一种整数类型转换为另一种整数类型,并在编译器和静态分析工具中敲响警钟?
不同的编译器会发出如下警告:
int i = get_int();
size_t s = i;
Run Code Online (Sandbox Code Playgroud)
失去符号或
size_t s = get_size();
int i = s;
Run Code Online (Sandbox Code Playgroud)
用于缩小范围。
强制转换可以消除警告,但不能解决安全问题。
有没有正确的方法来做到这一点?
小智 7
您可以尝试boost::numeric_cast<>。
boost numeric_cast 返回将 Source 类型的值转换为 Target 类型的值的结果。如果检测到超出范围,则会引发异常(请参阅 bad_numeric_cast、 negative_overflow 和 Positive_overflow )。