在评估某些含义时,括号会做什么? 我在代码中遇到过这种情况,当检查某些内容并使用
时if ( (some condition that returns 1) )
{
code
}
所以我的问题是,这评估为真吗?我认为它总是错误的,因为(1)不返回任何东西?
编辑:澄清,问题是为什么双括号中的if?我知道1是真的。答案 0 :(得分:10)
当赋值用于其真值时,将使用其他括号。它们允许编译器区分
if ((var = expr))
作为任务和真值测试的合法组合,
if (var = expr)
作为if (var == expr)
的拼写错误。
从C和C ++继承的惯例是编译器在if (var = expr)
上警告if (var == expr)
可能的拼写错误。它们不会在if ((var = expr))
上发出警告,因为额外的括号集向编译器发出指示,指出意图。正如rob mayoff所解释的那样,clang有一个特殊情况,不会对self
的某些任务发出警告,但对于许多程序员而言,习惯仍然存在。
正如其他人所说,生成的代码完全相同,有没有额外的parens。
答案 1 :(得分:4)
如果你写,
if (self = [super init]) { // Warning
// ...
}
编译器会给你一个警告,因为它认为你可能错误地将=
列为==
。如果添加第二组括号,警告就会消失。
if ((self = [super init])) { // No warning
// ...
}
因此额外的括号可能会使拼写错误的可能性降低。括号不会更改表达式的值。
答案 2 :(得分:2)
通常0等于false,NOT 0等于true。
此链接解释了objective-c中的bool:http://www.mindsizzlers.com/2010/04/objective-c-and-the-properties-of-bool/
答案 3 :(得分:1)
bool
和int
false
的布尔值相当于int
的{{1}}值。0
的布尔值相当于非零的true
值(例如int
,1
,10
等)例如,请考虑下面的C代码示例:
3000
以下两个片段将完全返回相同的结果。
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
语句中,您必须具有解析为true或false值的表达式。有关表达的示例,请参阅this页面。