Objective-C中的三元运算符赋值

时间:2013-08-12 14:58:44

标签: objective-c ternary-operator

我找到了一种分配这样的值的方法:

NSString *result = [self string] ?: @"none";

如果[self string]返回的值不等于nil,则结果将是返回值,否则为@“none”。就像 Python 中的or运算符一样。

我测试了几个案例,它工作正常。像:

int a = 10 ?: 0; // a is 10
int a = 0 ?: 5; // a is 5
NSString *str = @"abc" ?: 10; // warning: incompatible pointer. It has type checking?

但我找不到任何有关此语法的相关文档或信息。所以我想知道为什么它有效。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:3)

这是C的GNU扩展,记录为here。请注意,它仅对表达式求值一次,并重用结果(当表达式有副作用时很有用)。 clang包括它但我找不到任何相关的文档。


编辑:这是使用LLVM实现的类引用:http://clang.llvm.org/doxygen/classclang_1_1BinaryConditionalOperator.html

请注意:

  

BinaryConditionalOperator - 条件运算符的GNU扩展,允许省略中间操作数。