繁体   English   中英

自动将 int 转换为 unsigned int

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM