三元运算符是否以恒定的方式工作?

时间:2015-06-03 21:25:44

标签: objective-c syntax ternary

为什么在分配这样的CGSize const时使用三元运算符会出现编译器错误?

CGSize const ksizeSmall = SOME_BOOLEAN_VARIABLE ? {187, 187} : {206, 206};

它确实像这样......

CGSize const ksizeSmall = {187, 187};

但是,我想添加一个布尔表达式来评估我是否应该使用一个大小而不是另一个大小。我不想使用if / else,因为我有一长串的CGSize专门用于不同目的。

1 个答案:

答案 0 :(得分:3)

{187, 187}{206, 206} 聚合作为初始化表达式有效,但不能作为通用表达式 * 。这就是为什么三元运算符不允许它。

如果要为局部常量制作初始值设定项,可以使用CGSizeMake

CGSize const ksizeSmall = SOME_BOOLEAN_VARIABLE ? CGSizeMake(187, 187) : CGSizeMake(206, 206);

如果SOME_BOOLEAN_VARIABLE是编译时常量表达式,则可以使用条件编译:

#if SOME_BOOLEAN_VARIABLE
CGSize const ksizeSmall = {187, 187};
#else
CGSize const ksizeSmall = {206, 206};
#endif

* gcc编译器具有C语言扩展,为此提供了特殊语法。它也可以在Objective-C中找到。但是,此扩展名不是该语言的一部分。