我对下面的程序感到有些困惑。在我的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;
}
}
答案 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。