带双括号的 C++ if-Statement 有什么作用?

Jer*_*ere 2 c++ unix

我偶然发现了一个if语句,其中条件实际上是一个赋值,我真的不明白它的作用。现在,我发现了一个具有广泛答案的类似问题,但我仍然不太明白,我的代码段是做什么的:

if ((x = !x))
    /* some code */
Run Code Online (Sandbox Code Playgroud)

我发现的类似问题是这个:https : //unix.stackexchange.com/questions/306111/what-is-the-difference-between-the-bash-operators-vs-vs-vs

一位用户表示,

((...)) 双括号包围算术指令,即整数计算,其语法类似于其他编程语言。这种语法主要用于赋值和条件。这仅存在于 ksh/bash/zsh 中,而不存在于普通 sh 中。

这意味着什么?x现在是toggled的值而没有其他事情发生吗?在什么情况下这个条件返回false

Nic*_*las 9

它做同样的事情if(x = !x)。然而,因为它很容易被意外使用=来代替==,所以当您在if语句中使用赋值时,编译器会警告您。如果赋值表达式在第二组括号内,则不会显示该警告。

所以这就是额外括号的重点:告诉编译器/阅读器作者真的打算使用赋值而不是相等测试。

  • 它的风格仍然很糟糕。首先是 `x = !x;`,然后是 `if (x)` 更具可读性。 (4认同)
  • 请注意,警告及其抑制都不是语言定义的一部分。这是编译器的问题,而不是语言的问题。 (3认同)