为什么在init方法中使用双括号,或者是1 ==(1)?

Dvo*_*ole 2 c objective-c

在评估某些含义时,括号做了什么?我在代码中遇到过这种情况,当检查某些内容并使用它们时

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.