三元运算符是否以常量定义工作?

Does the ternary operator work in constant definition?

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

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

它确实是这样工作的...

CGSize const ksizeSmall = {187, 187};

但是,我想添加一个布尔表达式来评估我是否应该使用一种尺寸还是另一种尺寸。我不想使用 if / else 因为我有一长串 CGSize 可以专门为不同的目的设置。

{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 中可用。但是,此扩展不是语言的一部分。