仅在使用 const 关键字时出现整数溢出警告

问题描述 投票:0回答:1

在使用 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
关键字在这种特定情况下会触发溢出警告。

c++ compiler-warnings clang++
1个回答
0
投票

当您使用

const
限定符时,编译器会自动将变量的使用替换为初始值。当它尝试在表达式
-min
中执行此操作时,结果是超出
unsigned int
范围的值。

在没有

const
的版本中,
min
语句中对
return
的引用被正常处理,而不是用初始值替换。所以不存在已知的溢出。

© www.soinside.com 2019 - 2024. All rights reserved.