因此,对于在布尔二元运算符,Java有&,|,^,&&和||.
让我们简要总结一下他们在这里简要介绍的内容:
对于
&,结果值是true两个操作数值是否为true; 否则,结果是false.对于
|,结果值是false两个操作数值是否为false; 否则,结果是true.对于
^,结果值是true操作数值是否不同; 否则,结果是false.该
&&操作是一样&,但是评估其右边的操作数只有在其左侧操作数的值true.该
||操作是一样|的,但评估其右边的操作数只有在其左侧操作数的值false.
现在,所有5间,那些3有复合赋值版本,分别为|=,&=和^=.所以我的问题是显而易见的:为什么不是Java提供&&=和||=呢?我发现我需要那些比我更需要更多的&=和|=.
而且我不认为"因为它太长"是一个很好的答案,因为Java有>>>=.这个遗漏必须有更好的理由.
java conditional-operator short-circuiting assignment-operator compound-assignment
可能重复:
&& =和|| =运算符
见标题.可以扩展此问题以包括所有逻辑+赋值运算符.澄清:我不是在谈论| =运算符.
另一个例子:&& =
谢谢.
例:
bool result = false; // Today result = result || my_test1(); // Do stuff result = result || my_test2(); // In my imagination only... result ||= my_test1(); // Do stuff result ||= my_test2();
我编写了一个程序,列出了一组内容中的错误,并在结尾返回一个布尔值(返回true表示没有找到错误).
以下是我的代码摘要:
bool checkStuff1() {/*...*/}
bool checkStuff2() {/*...*/}
// ...
bool checkStuffN() {/*...*/}
bool checkAllStuff()
{
bool result = true;
result &= checkStuff1();
result &= checkStuff2();
// ...
result &= checkStuffN();
return result;
}
Run Code Online (Sandbox Code Playgroud)
我相信最终result将是正确的价值.但是,我想确保checkStuffX()调用所有函数(因为它们在失败时打印错误消息,并且我希望打印所有错误消息).
我知道,如果我这样写,它会checkStuffX()在第一个失败之后跳过所有:
result = result && checkStuffX(); // Will not call checkStuffX() if result is already false
Run Code Online (Sandbox Code Playgroud)
我也知道,如果我这样写,它会调用所有checkStuffX()函数:
result = checkStuffX() && result; // Will always call checkStuffX() even if result is false
Run Code Online (Sandbox Code Playgroud)
但我想知道我使用的代码的行为,按位比较,是否由标准确定并保证?
或者是否存在未定义行为的风险,具体取决于所使用的编译器及其优化?
对不起,如果这个问题不适合SO.
我有一个C++函数,大致看起来像下面给出的MyFun().
从这个函数我调用一些(比如大约30个)其他返回布尔变量的函数(true表示成功,false表示失败).如果这些函数中的任何一个返回false,我也必须从MyFun()返回false.此外,如果中间函数调用失败,我不应该立即退出(不调用其余函数).
目前我正如下面给出的那样做,但感觉可能有更简洁/简洁的方法来处理这个问题.任何建议表示赞赏.
非常感谢.
bool MyFun() // fn that returns false on failure
{
bool Result = true;
if (false == AnotherFn1()) // Another fn that returns false on failure
{
Result = false;
}
if (false == AnotherFn2()) // Another fn that returns false on failure
{
Result = false;
}
// Repeat this a number of times.
.
.
.
if (false == Result)
{
cout << "Some function call failed";
}
return Result;
}
Run Code Online (Sandbox Code Playgroud)