gpt4 book ai didi

c++ - gcc 警告 -Wsign-compare 在比较 const 时似乎不起作用

转载 作者:行者123 更新时间:2023-11-30 02:36:37 25 4
gpt4 key购买 nike

我的 g++ gcc 版本 5.1.1 20150618 (Red Hat 5.1.1-4) (GCC) 似乎没有出现符号比较错误。

当我使用选项编译以下内容时,我没有收到错误 - 但当我去掉 const 时 - 它会显示警告。

问题:这是预期的行为吗?

g++ typecompat.cxx -Wsign-compare -std=c++14

这是代码

#include <stddef.h>
#include <stdio.h>
#include <assert.h>
#include <vector>

int main() {
std::vector<int> v {1,2,3};
const int b = 2;
assert(v.size()>b);
return 0;
}

最佳答案

来自godbolt session of this code看起来 gcc 正在执行常量折叠:

cmpq    $2, %rax

因此它确定比较是正确的,任何尝试更改常量变量的行为都是未定义的行为,编译器将假定没有未定义的行为。如果我们看一下 documents它确实说:

Warn when a comparison between signed and unsigned values could produce an incorrect result when the signed value is converted to unsigned

这个 gcc 错误报告 Bogus warning with -Wsign-compare看起来它涵盖了这种误报检测:

To be useful, these warnings are meant to be smart - not warning if it can be proved that the signed value is nonnegative [...]

关于c++ - gcc 警告 -Wsign-compare 在比较 const 时似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32509235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com