if语句中的布尔函数调用

时间:2016-02-14 05:04:41

标签: c++

我对下面的程序感到有些困惑。在我的if语句中,我调用布尔函数两次。对于i和j变量,我被sp," else"应该执行语句,因为两个函数调用都将产生true。但我的"我"变量没有被修改(它输出为1001而不是1000),我不知道为什么。 j变量正在按预期进行修改。第一个函数调用传入" j"变量,第二个函数调用传入" i"变量。有人可以解释为什么"我"变量没有被修改?

#include <iostream>
using namespace std;

const int MINCOLOR = 0;
const int MAXCOLOR = 1000;

bool clipColor(int &amountColor);


int main()
{
    int i=1001;
    int j = 3333;
    int k;
    bool check;

    if (clipColor(j) == false && clipColor(i) == false)
    {
        check = false;
    }
    else 
    {
        check = true;
    }

    cout << i << " " << j << " " << check << " " << endl;
    return 0;
}


bool clipColor(int &amountColor)       
{
  if (amountColor > MAXCOLOR)
  {
    amountColor = MAXCOLOR;
    return true;
  }
  else if (amountColor < MINCOLOR)
  {
    amountColor = MINCOLOR;
    return true;
  }
  else
  {
    return false;
  }
}

2 个答案:

答案 0 :(得分:0)

This is because of how the && and || operators work. For &&, if the first operand is false, then the second operand is never even evaluated. Therefore, the second function call is not made.

This is known as short-circuit evaluation,不仅是C和C ++的功能,也是大多数编程语言的功能。

如果您明确要评估双方,那么对于bool返回,单个&运算符可以说是您想做的。根据规范,它按位进行AND,但由于bool值仅使用一位,因此结果应该正是您所需要的。

顺便说一下,clipColor(j) == false!clipColor(j)相同。

答案 1 :(得分:0)

在您的代码中

if (clipColor(j) == false && clipColor(i) == false)
{
    check = false;
}
else 
{
    check = true;
}

函数clipcolor(j)首先执行并返回true。 因此,无需clipColor(i)执行,因为无论值clipColor(i)返回,条件(clipColor(j) == false && clipColor(i) == false)将始终为false。