[英]Automatic conversion of int to unsigned int
#include <iostream>
using namespace std;
int main() {
unsigned int u = 5;
int x = -1;
if(x>u) {
cout<<"Should not happen"<<endl;
} else {
cout<<"Ok"<<endl;
}
}
此代码输出Should not happen
。 在将字符串的大小(size_t 是 unsigned int 或 unsigned long long 值)与 int 进行比较时,我遇到了这个问题。 似乎 C 类型将 int 转换为 unsigned int 但实际上,它似乎会带来错误。 老实说,考虑到 int 与 unsigned int 的不兼容程度,我更喜欢编译时错误。 我想知道为什么约定是这样的?
您可以在 Clang 中启用-Wsign-compare -Werror
-Werror: 在线试用!
它会产生一个编译时错误(因为-Werror
将警告视为错误):
.code.tio.cpp:7:9: error: comparison of integers of different signs: 'int' and 'unsigned int' [-Werror,-Wsign-compare]
if(x>u) {
~^~
1 error generated.
出于某种原因, Clang(但不是 GCC)中的-Wall -Werror
不会产生任何错误。 但是-Wall -Wextra -Werror
确实包括-Wsign-compare
,所以你可以使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.