【发布时间】:2011-09-22 08:24:46
【问题描述】:
我有以下代码:
unsigned int a;
if (a > numeric_limits<int>::max())
do_stuff();
编译时gcc报错
警告:“有符号和无符号的比较”
好的,我明白了
但是,使用以下代码:
unsigned int a;
if (a > (numeric_limits<int>::max()))
do_stuff();
警告不再显示,我真的不知道为什么...... 这种行为有什么合乎逻辑的理由还是我做错了什么?!
【问题讨论】:
-
尝试simulate this behavior。但它显示警告。
-
周围的代码是什么?
-
@malamioute 创建一个 complete(= 编译),minimal 仍然表现出这种行为的示例(嗯,两个示例,一个带有警告,一个没有警告)并发布。由于我们无法重现您的问题,这表明问题实际上出在其他地方。
-
我也可以在 gcc 4.6 上看到这种情况。也许是一个错误,也许引入了能够在没有演员表的情况下消除该警告?可能最好的办法是直接询问 gcc 人员。 (也可以在 4.5 和 4.7 上看到)
-
@KonradRudolph 我已经使用 iammilind 提供的最少代码(编译)测试了这种行为(参见link)。在这种情况下不会出现警告。我使用的gcc版本是4.6
标签: c++ comparison compiler-warnings