ANSI标准是否要求逻辑运算符在C或C++中被短路?
我很困惑,因为我记得K&R的书说你的代码不应该依赖于这些操作被短路,因为它们可能没有.有人可以指出标准中的哪个位置逻辑操作始终是短路的吗?我最感兴趣的是C++,C的答案也很棒.
我还记得读(不记得在哪里)评估顺序没有严格定义,所以你的代码不应该依赖或假设表达式中的函数将按特定的顺序执行:在语句的末尾所有引用的函数将被调用,但编译器可以自由选择最有效的顺序.
标准是否表明该表达式的评估顺序?
if( functionA() && functionB() && functionC() ) cout<<"Hello world";
Run Code Online (Sandbox Code Playgroud) c c++ operator-precedence short-circuiting logical-operators
运算符的短路行为&&
,并||
是程序员的好工具.
但为什么他们在超载时会失去这种行为?我理解运算符只是函数的语法糖,但操作符bool
有这种行为,为什么它应该限制在这种类型?这背后有任何技术推理吗?
c++ operator-overloading short-circuiting logical-operators c++11
我知道规则&&
,||
但是什么是&
和|
?请以一个例子向我解释这些.
我记得有一段时间关于逻辑运算符的回顾,在这种情况下OR
,使用||
优于or
(反之亦然).
当我回到我身边时,我只能在我的项目中使用它,但我不记得推荐哪个运算符,或者它是否真实.
哪个更好?为什么?
是什么之间的区别&
,并&&
在MATLAB逻辑运算符?
哪一组是短路的,这究竟是什么意味着复杂的条件表达式是短路的?
public static void main(String[] args) {
int x, y, z;
x = 10;
y = 20;
z = 30;
// T T
// T F
// F T
// F F
//SET A
boolean a = (x < z) && (x == x);
boolean b = (x < z) && (x == z);
boolean c = (x == z) && (x < z);
boolean d = (x == z) && (x > z);
//SET B
boolean aa = (x …
Run Code Online (Sandbox Code Playgroud) 这是我见过的唯一一个地方and
,or
并被not
列为C++中的实际运算符.当我在NetBeans中编写一个测试程序时,我得到了红色下划线,好像有一个语法错误,并认为该网站是错误的,但它是错误的NetBeans,因为它编译并按预期运行.
我可以看到!
受到青睐,not
但and
&& 的可读性or
似乎比他们的语法兄弟更大.为什么这些版本的逻辑运算符存在,为什么看似没有人使用它?这是真正有效的C++还是与语言中包含的C的某种兼容性?
我读上的C#语言规范条件逻辑运算符 ||
和&&
,也被称为短路逻辑运算符.对我来说,似乎不清楚这些是否存在可空的布尔值,即操作数类型Nullable<bool>
(也是书面的bool?
),所以我尝试使用非动态类型:
bool a = true;
bool? b = null;
bool? xxxx = b || a; // compile-time error, || can't be applied to these types
Run Code Online (Sandbox Code Playgroud)
这似乎解决了这个问题(我无法清楚地理解规范,但假设Visual C#编译器的实现是正确的,现在我知道).
但是,我也想尝试dynamic
绑定.所以我尝试了这个:
static class Program
{
static dynamic A
{
get
{
Console.WriteLine("'A' evaluated");
return true;
}
}
static dynamic B
{
get
{
Console.WriteLine("'B' evaluated");
return null;
}
}
static void Main()
{
dynamic x = A | B;
Console.WriteLine((object)x);
dynamic y …
Run Code Online (Sandbox Code Playgroud) 我正在尝试学习python,并且遇到了一些既好又短的代码,但并不完全有意义
背景是:
def fn(*args):
return len(args) and max(args)-min(args)
Run Code Online (Sandbox Code Playgroud)
我得到它正在做的事情,但为什么python这样做 - 即返回值而不是True/False?
10 and 7-2
Run Code Online (Sandbox Code Playgroud)
返回5.同样,更改和将导致或将导致功能更改.所以
10 or 7 - 2
Run Code Online (Sandbox Code Playgroud)
会回来10.
这是合法/可靠的风格,还是有任何问题?
我想要元素方面的逻辑OR运算符.我知道"或"本身并不是我想要的.
我知道AND对应于&
和不对~
.但是OR怎么样?
python boolean-logic logical-operators boolean-operations pandas