我今天刚刚发现这个“C ++”,我无法理解它:
if(array[i][j]) {--i;--j;}
任何人都可以向我解释这是如何工作的?我只是不明白。这是什么情况?看起来每次都是如此,但是当我摆脱了IF(所以只剩下这个{--i;--j;}
。)它的效果不一样。
我对C ++很陌生,所以请轻松解释一下! :)
谢谢!
答案 0 :(得分:20)
在C ++中,非零值可用于表示条件语句中的“成功”。
这是来自C99,第6.8.4.1节:
if
声明2在两种形式中,如果表达式将une等于0,则执行第一个子语句。
来自C ++ 03,第6.4节
4作为switch语句之外的语句中的初始化声明的条件的值是隐式转换为bool类型的声明变量的值。如果转换形式不正确,该程序就会形成错误。在switch语句中作为初始化声明的条件的值是声明变量的值(如果它具有整数或枚举类型),或者是隐式转换为整数或枚举类型的变量。作为表达式的条件的值是表达式的值,对于除switch之外的语句,隐式转换为bool;如果转换形成不良,该计划就是格式错误。条件的值将被简称为“条件”,其中使用是明确的。
布尔转换在6.3.1.2中定义
6.3.1.2布尔类型
1当任何标量值转换为_Bool时,如果值比较等于0,则结果为0;否则,结果是1。
int
是标量类型。我认为这是你的数组填充的内容,因为你可以在它们上使用一元++
和--
。
答案 1 :(得分:10)
假设array是int(或其他整数类型)的数组,当且仅当array[i][j] == 0
答案 2 :(得分:3)
如果if
在投放到true
时获得array[i][j]
,true
将获得bool
。如果array
有例如float
或int
值,任何不等于0
的值都将转换为true
。对于用户定义的类型,情况可能不同。
答案 3 :(得分:0)
if语句的括号中需要一个布尔值。所以它会尝试显式地将你的表达式转换为布尔值。例如,对于整数和指针,非零值将为true,零值将为false。
因此,如果你的表达式(array [i] [j])可以转换为true,那么条件将为真。
答案 4 :(得分:0)
“条件”是bool
表达式。在C ++中,int
可以隐式转换为bool
。 (其中0 =假,其他一切都是真的)。
答案 5 :(得分:0)
最好让您了解我是否按以下方式重写代码:
if((array[i][j])==true)
{
--i;
--j;
}
这意味着,if条件实际检查您的数组行和列值是否为布尔值true。然后它将进入你的if-block并递减i和j值,这意味着它将转移到你的数组的前一行和前一列。
当然,在实现之前,需要将数组值的数据类型转换为布尔值。