【发布时间】:2021-02-01 14:32:30
【问题描述】:
我偶然发现了一个if 语句,其中条件实际上是一个赋值,我并不真正理解它的作用。现在,我发现了一个类似的问题,答案很广泛,但我还是不太明白,我的 sn-p 做了什么:
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 的值现在是否已切换并且没有发生其他任何事情?这个条件在什么情况下返回false?
【问题讨论】:
-
在 if 谓词中执行 assignment 时,许多编译器会发出 warning,因为预期的可能是 等式检查,并输入了一个错字。额外的括号告诉编译器“故意做一个赋值,不要警告我。”
-
您是在询问 C++(这是您的标签)还是 shell 脚本语言(这是您的引号所涉及的)
-
[C++] 这是试图阻止编译器警告一个常见的(但合法的)错误,即在 if 语句中分配而不是测试相等性。
-
不要期望任何给定的字符序列在所有语言中都具有相同的含义。