我不太明白这个示例行:
bool static_read = static_tactile_to_update != -1 && !CapSense_IsBusy();
Run Code Online (Sandbox Code Playgroud)
static_read用一个值初始化,它是static_tactile_to_update(一个介于 -1 和 27 之间的 int 值)。如果是!= -1 && !CapSense_IsBusy()
,static_read则不会接收此变量的意思static_tactile_to_update是-1?(或如果CapSense_IsBusy()返回true)
我只想知道not和and是否用作条件,如果不满足,将阻止将变量传递给新值。
由于运算符优先,这被解释为
bool static_read = ((static_tactile_to_update != -1) && !CapSense_IsBusy());
Run Code Online (Sandbox Code Playgroud)
它不是设置static_read为 的值static_tactile_to_update,而是将其设置为与 比较的值,并与 进行-1逻辑与运算!CapSense_IsBusy()。
此外,由于 的短路&&,它只会调用CapSense_IsBusy()if static_tactile_to_update !- -1。
完整的逻辑本质上等同于:
bool static_read;
if (static_tactile_to_update != -1) {
static_read = !CapSense_IsBusy();
} else {
static_read = false;
}
Run Code Online (Sandbox Code Playgroud)
这不是变量初始化的条件,而是使用涉及的逻辑运算符初始化变量。
static_read是总是分配评估表达式的结果:
static_tactile_to_update != -1 && !CapSense_IsBusy();
Run Code Online (Sandbox Code Playgroud)
这意味着唯一的方法true是如果两者都不 static_tactile_to_update是-1并且CapSense_IsBusy()返回false。
在每种情况下,都会为变量分配一个值,而不是有条件地分配。
条件赋值看起来像这样:
bool static_read;
if (...)
static_read = true;
Run Code Online (Sandbox Code Playgroud)
对于表达式的复杂程度也没有限制,因此您可以根据需要链接尽可能多的运算符来表达您尝试实现的逻辑。