我想看看,我是否可以将其缩短为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的情况下实际做了什么?
答案 0 :(得分:3)
我认为这是因为5 < x
返回false,它会转换为0,小于7。
答案 1 :(得分:0)
如果你想让它根本不使用逻辑和运算符,这应该有效:
5 < x == 1 == (x < 7)
这评估为1 == 1 == 1,即1 == 1,这是一个真值。由于编译器如何从左向右读取,因此需要括号。