转换整数类型

dor*_*ron 1 c c++

如何安全地从一种整数类型转换为另一种整数类型,并在编译器和静态分析工具中敲响警钟?

不同的编译器会发出如下警告:

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 )。