使用三元运算符而不将其赋值给变量

时间:2015-09-27 05:49:57

标签: c

我知道这是可能的,但使用三元运算符调用函数而不是使用if语句是一种好习惯吗?

if(x){
   a();
} else if(y){
   b();
} else if(z){
   c();
}

而是这样做:

(x) ? 
   a() : 
(y) ? 
   b() : 
(z) ? 
   c() : 0;

是否存在我不知道的未知问题?

1 个答案:

答案 0 :(得分:3)

关于条件运算符如何工作的细节,请参阅C11 Standard,第6.5.15节。

最大的区别在于条件(三元)运算符专门用于赋值。如,

x = (a < b) ? c : d

如果(a < b)不为零(true),x = c;否则,x = d

需要考虑cd的若干限制(见6.5.15.3)。其中最主要的是cd必须是以下之一:

  • 两种算术类型
  • 相同的structunion类型
  • 两种无效类型
  • 两个指针(或可以转换为此类)

现在所有这些都说明了,你特别没有分配给变量,但这些函数的返回值也需要保持这些约束。

然而,正如在对该问题的评论中指出的那样 - 这仍然牺牲了对简洁性的可读性。这几乎不是最好的做法。

**非常感谢@JensGustedt指出我的答案中的错误并帮助我修复它们!