IF价值失败的比较测试(C++)

use*_*389 4 c++ object

我现在的项目太长了,不能在这里发布,但是,这是产生一种非常奇怪的行为的单行,至少在我看来.我使用该clip对象存储相对较短的字符串(35中使用的最大大小),但是在处理负值时条件失败start.

我尝试(const int)在前面 添加clip.length(),但输出不会改变:

任何想法是什么意思?我在Ubuntu 14.04上使用G ++.

 void Cut ( const int start, const int stop )
 { if (start > clip.length() ) cout << "start: " << start << " > " << clip.length() << endl;

  ...
 }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Ale*_*exD 12

很可能length()返回unsigned int,所以另一个参数,也signed int被转换为unsigned,然后进行比较.

它是所谓的通常算术转换的一部分.看标准:

表达式[expr]

....

否则,如果具有无符号整数类型的操作数的秩大于或等于另一个操作数的类型的秩,则具有有符号整数类型的操作数应转换为具有无符号整数类型的操作数的类型.