在评估某些含义时,括号做了什么?我在代码中遇到过这种情况,当检查某些内容并使用它们时
if ( (some condition that returns 1) )
{
code
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,这是否评估为真?我认为它总是错误的,因为(1)不返回任何东西?
编辑:澄清,问题是为什么双括号中的if?我知道1是真的.
use*_*342 10
当赋值用于其真值时,使用附加括号.它们允许编译器区分
if ((var = expr))
Run Code Online (Sandbox Code Playgroud)
作为任务和真值测试的合法组合,和
if (var = expr)
Run Code Online (Sandbox Code Playgroud)
作为拼写错误的if (var == expr).
从C和C++继承的惯例是编译器警告if (var = expr)可能的错误拼写if (var == expr).它们不会发出警告if ((var = expr)),因为额外的括号集向编译器发出了分配预期的信号.正如rob mayoff所解释的那样,clang有一个特殊情况,不会警告某些任务self,但对于许多程序员而言,这种习惯仍然存在.
正如其他人所说,生成的代码完全相同,有没有额外的parens.