标签: short-circuiting

C++如何处理&&?(短路评估)

当遇到(bool1 && bool2)时,如果发现bool1为false,c ++是否会尝试检查bool2,或者它是否像PHP那样忽略它?

对不起,如果它是一个问题的基础,但我真的无法在Schildt或互联网上找到这一点.

c++ short-circuiting and-operator logical-and

45
推荐指数
3
解决办法
3万
查看次数

为什么语言不能使用短路评估?

为什么语言不能使用短路评估?不使用它有什么好处吗?

我看到它可能导致一些表演问题......这是真的吗?为什么?


相关问题:使用短路评估的好处

language-agnostic conditional short-circuiting

39
推荐指数
3
解决办法
9068
查看次数

所有编程语言都有布尔短路评估吗?

在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)

language-agnostic if-statement short-circuiting

38
推荐指数
7
解决办法
9890
查看次数

bool短路的&=和| =运算符?

在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

38
推荐指数
5
解决办法
3万
查看次数

Python的任何/所有显式的短路行为是什么?

这里的讨论提示

文档建议为的行为的一些等价代码allany

是否应将等效代码的行为视为定义的一部分,或者实现是否可以以非短路方式实现它们?

以下是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)

python short-circuiting language-specifications

36
推荐指数
3
解决办法
4867
查看次数

Java中有&=和| =短路?

换句话说,以下两个语句的行为方式是否相同?

isFoobared = isFoobared && methodWithSideEffects();
isFoobared &= methodWithSideEffects();
Run Code Online (Sandbox Code Playgroud)

我意识到我可以写一个测试,但有人可能会知道这个,其他人可能会觉得答案很有用.

java short-circuiting

33
推荐指数
1
解决办法
4849
查看次数

Python中使用的&符和竖条字符在哪里?

维基百科页面描述短路评价,&并且|被列为在Python跃跃欲试的运营商.这是什么意思,什么时候用在语言中?

python short-circuiting

32
推荐指数
4
解决办法
4万
查看次数

Perl(或,和)和(||,&&)短路运营商之间有什么区别?

哪些子程序与其他子程序不一样?

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,您使用什么经验法则来决定使用哪种结构并确保代码正在执行您认为正在执行的操作?

perl short-circuiting

30
推荐指数
3
解决办法
3万
查看次数

c#?? 操作员短路?

??在C#中使用运算符时,如果被测试的值不为空,它是否会短路?

例:

string test = null;
string test2 = test ?? "Default";

string test3 = test2 ?? test.ToLower();
Run Code Online (Sandbox Code Playgroud)

test3行是成功还是抛出空引用异常?

所以用另一种方式来表达这个问题:请问右手表达的问题是什么?如果左手不为空,则运算符得到评估?

c# operators short-circuiting

30
推荐指数
3
解决办法
5578
查看次数

如何避免短路评估

我正在使用Ruby on Rails,并希望验证两种不同的模型:

if (model1.valid? && model2.valid?)
...
end
Run Code Online (Sandbox Code Playgroud)

但是,"&&"运算符使用短路评估(即仅当"model1.valid?"为真时才评估"model2.valid?"),这会阻止在model1无效时执行model2.valids.

是否存在不会使用短路评估的等效"&&"?我需要评估两个表达式.

ruby-on-rails operators short-circuiting logical-operators

29
推荐指数
2
解决办法
7517
查看次数