当遇到(bool1 && bool2)时,如果发现bool1为false,c ++是否会尝试检查bool2,或者它是否像PHP那样忽略它?
对不起,如果它是一个问题的基础,但我真的无法在Schildt或互联网上找到这一点.
在PHP代码中
if(a() && b())
Run Code Online (Sandbox Code Playgroud)
当第一个操作数求值时false,b()将不会被求值.
同样地,在
if (a() || b())
Run Code Online (Sandbox Code Playgroud)
当第一个操作数计算到true,b()将不会被评估..
这适用于所有语言,如Java,C#等吗?
这是我们使用的测试代码.
<?php
function a(){
echo 'a';
return false;
}
function b(){
echo 'b';
return true;
}
if(a() && b()){
echo 'c';
}
?>
Run Code Online (Sandbox Code Playgroud) 在C++中编写这样的代码时:
bool allTrue = true;
allTrue = allTrue && check_foo();
allTrue = allTrue && check_bar();
Run Code Online (Sandbox Code Playgroud)
check_bar()如果check_foo()退回,将不会被评估false.这称为短路或短路评估,是惰性评估原则的一部分.
这是否适用于复合赋值运算符&=?
bool allTrue = true;
allTrue &= check_foo();
allTrue &= check_bar(); //what now?
Run Code Online (Sandbox Code Playgroud)
用逻辑OR替换所有&with |和truewith false.
c++ boolean lazy-evaluation short-circuiting compound-assignment
这里的讨论提示
是否应将等效代码的行为视为定义的一部分,或者实现是否可以以非短路方式实现它们?
以下是cpython/Lib/test/test_builtin.py的相关摘录
def test_all(self):
self.assertEqual(all([2, 4, 6]), True)
self.assertEqual(all([2, None, 6]), False)
self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
self.assertRaises(RuntimeError, all, TestFailingIter())
self.assertRaises(TypeError, all, 10) # Non-iterable
self.assertRaises(TypeError, all) # No args
self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
self.assertEqual(all([]), True) # Empty iterator
S = [50, 60]
self.assertEqual(all(x > 42 for x in S), True)
S = [50, 40, 60]
self.assertEqual(all(x > 42 for x in S), False)
def test_any(self): …Run Code Online (Sandbox Code Playgroud) 换句话说,以下两个语句的行为方式是否相同?
isFoobared = isFoobared && methodWithSideEffects();
isFoobared &= methodWithSideEffects();
Run Code Online (Sandbox Code Playgroud)
我意识到我可以写一个测试,但有人可能会知道这个,其他人可能会觉得答案很有用.
在维基百科页面描述短路评价,&并且|被列为在Python跃跃欲试的运营商.这是什么意思,什么时候用在语言中?
哪些子程序与其他子程序不一样?
sub or1 {
my ($a,$b) = @_;
return $a || $b;
}
sub or2 {
my ($a,$b) = @_;
$a || $b;
}
sub or3 {
my ($a,$b) = @_;
return $a or $b;
}
sub or4 {
my ($a,$b) = @_;
$a or $b;
}
Run Code Online (Sandbox Code Playgroud)
我从C和Perl 4来到Perl 5并一直使用,||直到我看到更多的脚本使用or,我喜欢它的样子.但正如上面的测验所显示的那样,对于那些粗心大意的人来说,这并非没有缺陷.对于同时使用这两种结构或者使用很多结构的人来说or,您使用什么经验法则来决定使用哪种结构并确保代码正在执行您认为正在执行的操作?
??在C#中使用运算符时,如果被测试的值不为空,它是否会短路?
例:
string test = null;
string test2 = test ?? "Default";
string test3 = test2 ?? test.ToLower();
Run Code Online (Sandbox Code Playgroud)
test3行是成功还是抛出空引用异常?
所以用另一种方式来表达这个问题:请问右手表达的问题是什么?如果左手不为空,则运算符得到评估?
我正在使用Ruby on Rails,并希望验证两种不同的模型:
if (model1.valid? && model2.valid?)
...
end
Run Code Online (Sandbox Code Playgroud)
但是,"&&"运算符使用短路评估(即仅当"model1.valid?"为真时才评估"model2.valid?"),这会阻止在model1无效时执行model2.valids.
是否存在不会使用短路评估的等效"&&"?我需要评估两个表达式.
short-circuiting ×10
c++ ×2
operators ×2
python ×2
and-operator ×1
boolean ×1
c# ×1
conditional ×1
if-statement ×1
java ×1
logical-and ×1
perl ×1