在使用 clang++ v. 17.0.1 或更高版本(带有标志
const
)时,我在 C++ 中遇到带有 -Winteger-overflow
关键字的警告。
这是代码片段:
int foo_const()
{
const auto min = std::numeric_limits<int>::min(); // const keyword
return - min; // warning: overflow in expression; result is -2147483648 with type 'int' [-Winteger-overflow]
}
int foo()
{
auto min = std::numeric_limits<int>::min(); // no const keyword
return - min; // no warning
}
在
foo_const
函数中,我收到有关潜在整数溢出的警告。但是,非常量 foo
函数中的相同操作编译时不会出现警告。
我希望能得到一些帮助来理解为什么
const
关键字在这种特定情况下会触发溢出警告。
当您使用
const
限定符时,编译器会自动将变量的使用替换为初始值。当它尝试在表达式 -min
中执行此操作时,结果是超出 unsigned int
范围的值。
在没有
const
的版本中,min
语句中对 return
的引用被正常处理,而不是用初始值替换。所以不存在已知的溢出。