为什么在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/
bool
和int
真值和假值
- 布尔值
false
等于int
值0
。 - 布尔值
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值的表达式。 有关表达的示例,请参阅此页面。