0

我想看看是否if (row > -1 && row < _rows)可以将其缩短为if (-1 < row < _rows). 我使用下面的测试来找出(它没有返回任何编译错误)。

int x = 5;
BOOL test1 = NO;
BOOL test2 = NO;
BOOL test3 = NO;

if (x < 6 && x > 4) {
    test1 = YES;
}
if (4 < x < 6) {
    test2 = YES;
}
if (5 < x < 7) {
    test3 = YES;
}

所有三个测试都出现了YES,包括第三个,如果我的语法正确,应该是NO. 看起来这不是有效的语法,但我的问题是,当语法(5 < 5 < 7)返回 true 时,编译器实际上在做什么?

4

2 回答 2

3

我认为这是因为5 < x返回 false,它强制转换为 0,小于 7。

于 2013-01-05T04:23:15.500 回答
0

如果您希望它根本不使用逻辑 and 运算符,则应该可以:

5 < x == 1 == (x < 7)

这计算为 1 == 1 == 1 ,即 1 == 1,这是一个真值。由于编译器从左到右读取的方式,因此需要括号。

于 2013-01-05T04:31:53.153 回答