【问题标题】:if without condition?如果没有条件?
【发布时间】:2011-05-16 06:02:16
【问题描述】:

我今天才发现这个“C++”,我无法理解它:

if(array[i][j]) {--i;--j;}

谁能向我解释这是如何工作的?我只是不明白。这里的条件是什么?似乎每次都是这样,但是当我摆脱 IF 时(所以只剩下这个 {--i;--j;}。)它的工作方式不同。

我对 C++ 还很陌生,所以请简单解释一下! :)

谢谢!

【问题讨论】:

  • 原来是你为if (val != 0){...}带来了潮流!
  • 在相关说明中,说boolean b = whatever(); if (b) { ... } else { ... } 是完全有效的,因为if 不期望条件,而是布尔表达式 i>,最简单的布尔表达式之一是布尔变量的名称。

标签: c++ multidimensional-array if-statement


【解决方案1】:

假设数组是一个int(或其他整数类型)数组,当且仅当array[i][j] == 0时,条件才会为假

【讨论】:

    【解决方案2】:

    在 C++ 中,非零值可用于在条件语句中表示“成功”。

    这是来自 C99,第 6.8.4.1 节:

    if 声明

    2 在这两种形式中,如果表达式比较不等于 0,则执行第一个子语句。

    来自 C++03,第 6.4 节

    4 在switch语句之外的语句中作为初始化声明的条件的值是隐式转换为bool类型的声明变量的值。如果该转换格式不正确,则程序格式错误。在 switch 语句中作为初始化声明的条件的值是声明变量的值,如果它具有整数或枚举类型,或者该变量隐式转换为整数或枚举类型,否则。作为表达式的条件的值是表达式的值,对于 switch 以外的语句,隐式转换为布尔值;如果该转换格式不正确,则程序格式错误。条件的值将被简称为“条件”,其用法是明确的。

    并且布尔转换在6.3.1.2中定义

    6.3.1.2 布尔类型

    1 任何标量值转换为_Bool时,如果值比较等于0则结果为0;否则,结果为 1。

    int 是一个标量类型。我假设这就是您的数组中填充的内容,因为您可以在它们上使用一元 ++--

    【讨论】:

      【解决方案3】:

      如果array[i][j] 在转换为bool 时获得true,则if 将获得true。如果 array 有例如floatintvalues,不等于 0 的任何内容都将转换为 true。对于用户定义的类型,情况可能会有所不同。

      【讨论】:

        【解决方案4】:

        if 语句的括号中需要一个布尔值。因此,它将尝试将您的表达式显式转换为布尔值。例如,对于整数和指针,非零值为真,零值为假。

        因此,如果您的表达式 (array[i][j]) 可以强制转换为 true,那么条件将为 true。

        【讨论】:

        • 我认为您的意思是“所以它会尝试隐式将您的表达式转换为布尔值”
        【解决方案5】:

        “条件”是bool 表达式。在 C++ 中,int 可以隐式转换为 bool。 (其中 0 = 假,其他一切都为真)。

        【讨论】:

        • 0 = false,每隔一个值 = true(不仅仅是 1)。
        • 确认!谢谢;更新了我的答案。我在想另一种方式(从 bool -> int 转换意味着 true = 1)。
        【解决方案6】:

        如果我按照以下方式重写您的代码,您会更好地理解:

        if((array[i][j])==true)
        {
            --i;
            --j;
        }
        

        也就是说,if 条件实际上检查您的数组行和列值是否为布尔值 true。然后它将进入您的 if 块并递减 i 和 j 值,这意味着它将转移到数组的上一行和上一列。

        当然,在实现此功能之前,您需要将数组值的数据类型转换为布尔值。

        【讨论】:

          猜你喜欢
          • 2016-05-24
          • 2012-03-16
          • 1970-01-01
          • 1970-01-01
          • 2020-06-28
          • 2014-06-19
          • 2020-12-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多