带双括号的C++if-Statement有什么作用?
我偶然发现了一个if语句,其中条件实际上是一个赋值,我真的不明白它的作用。现在,我发现了一个具有广泛答案的类似问题,但我仍然不太明白,我的代码段是做什么的:
if ((x = !x))
/* some code */
我发现的类似问题是这个:https : //unix.stackexchange.com/questions/306111/what-is-the-difference-between-the-bash-operators-vs-vs-vs
一位用户表示,
((...)) 双括号包围算术指令,即整数计算,其语法类似于其他编程语言。这种语法主要用于赋值和条件。这仅存在于 ksh/bash/zsh 中,而不存在于普通 sh 中。
这意味着什么?x现在是toggled的值而没有其他事情发生吗?在什么情况下这个条件返回false?
回答
它做同样的事情if(x = !x)。然而,因为它很容易被意外使用=来代替==,所以当您在if语句中使用赋值时,编译器会警告您。如果赋值表达式在第二组括号内,则不会显示该警告。
所以这就是额外括号的重点:告诉编译器/阅读器作者真的打算使用赋值而不是相等测试。
- It's still terrible style.`x = !x;` first, then `if (x)` is way more readable.
- Note that neither the warning nor its suppression is part of the language definition. This is a compiler thing, not a language thing.