gpt4 book ai didi

c++ - 即使启用了 Wextra,gcc 也不会给出比较无符号整数 < 0 的警告

转载 作者:行者123 更新时间:2023-12-01 14:29:56 26 4
gpt4 key购买 nike

取下面的代码

#include <iostream>

template<typename T>
T f(T x, unsigned y) {
if (y < 0) return x;
return static_cast<T>(0);
}

using namespace std;

int main() {

int a = f(2, 3);
std::cout << a << std::endl;

return 0;
}

where function f 显然总是返回 0。用 g++-7.2.0 -Wall -Wextra 编译它没有给出关于无意义比较的提示。然而,clang 很好地警告我们:

a.cpp:7:11: warning: comparison of unsigned expression < 0 is always false [-Wtautological-compare]
if (y < 0) return x;
~ ^ ~
1 warning generated.

为什么会这样(我认为模板是问题的根源),在这种情况下是否可以强制 gcc 输出警告?

最佳答案

这是某些 GCC 版本(包括 8.x 和 9.x - 在撰写本文时仍是许多发行版的默认编译器)中的回归错误。

错误已被跟踪 here (@jureslak 再次提交,但被标记为欺骗)并已解决。 See the warning with GCC 10.1 (神箭)。

关于c++ - 即使启用了 Wextra,gcc 也不会给出比较无符号整数 < 0 的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47207834/

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