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

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

if ( (some condition that returns 1) ) { code } 

所以我的问题是,这是否评估为真? 我认为它总是错误的,因为(1)不返回任何东西?

编辑:澄清,问题是为什么双括号中的if? 我知道1是真的。

当赋值用于其真值时,使用附加括号。 它们允许编译器区分

 if ((var = expr)) 

作为任务和真值测试的合法组合,和

 if (var = expr) 

作为if (var == expr)的拼写错误。

从C和C ++inheritance的约定是编译器警告if (var = expr)作为if (var == expr)的可能拼写错误。 它们不会对if ((var = expr))发出警告,因为额外的括号集会向编译器发出分配预期的信号 。 正如rob mayoff所解释的那样,clang有一个特殊情况,不会警告自己的某些任务,但对于许多程序员而言,这种习惯仍然存在。

正如其他人所说,生成的代码完全相同,有没有额外的parens。

如果你写,

 if (self = [super init]) { // Warning // ... } 

编译器会给你一个警告,因为它认为你可能有错误输入= as == 。 如果添加第二组括号,警告就会消失。

 if ((self = [super init])) { // No warning // ... } 

因此额外的括号可以减少拼写错误。 括号不会更改表达式的值。

通常,0等于false,NOT 0等于true。

此链接在objective-c中解释了bool: http : //www.mindsizzlers.com/2010/04/objective-c-and-the-properties-of-bool/

boolint真值和假值

  • 布尔值false等于int0
  • 布尔值true等于int值非零(例如3000等)

例如,考虑以下C代码的示例:

 bool bValue; int nValue; bValue = true; nValue = 1; if (bValue == nValue) { printf("bValue and nValue are the same!\n"); } // output: bValue and nValue are the same! 

包含多个括号:

以下两个片段返回完全相同的结果。

 if ((((((((((((((((((((1)))))))))))))))))))) { printf("Hello World!\n"); } 

返回相同的结果:

 if (1) { printf("Hello World!\n"); } 

if语句中的表达式

在给定的if语句中,您必须具有解析为true或false值的表达式。 有关表达的示例,请参阅此页面。