美文网首页macOS开发备忘录
iOS 奇妙的三目运算符

iOS 奇妙的三目运算符

作者: 慕_風 | 来源:发表于2018-03-02 15:59 被阅读3654次

基础

一般情况下,我们使用三目运算符(?:)的语法格式是:

(expression)?if-true-statement :if-false-statement; 

如果表达式expression结果为真,则执行if-true-statement,否则执行if-false-statement。
我们经常会使用三目运算符进行简单的判断赋值,例如:

y = x ? x : z;

即如果x为真,则返回x,如果x为假,则返回z,这是最简单最基本的用法。

高级

但是偶尔我们也会看到这种用法:

y = x ? : z;

? 与 :之间没有任何操作数,这是什么用法呢?
通过几次实验发现,当x为真时,y的值与x值一致。那我猜测? 与 : 之间省略了x。
也就是说,y = x ? : z; 与y = x ? x : z;等价,这样就和事实相一致了。

复杂

但是,这这只是最简单的情况,那么稍微复杂一点的情况呢?
如:a > b ? : b中间省略了什么呢?会是a吗?
经过验证后发现,并不是a。
其实它是省略了a > b 。
也就是说a > b ? : b 等价于 a > b ? a > b : b;
那么这样似乎可以得出结论,? 与 : 中间省略的东西,是与? 之前的表达式一致的。
那么确实是这样的吗?

特例

我们知道,在OC中,有一类很奇怪的运算符,自增(++)/自减(--)运算符。那么它在三目运算符中的表现如何呢?
如:

int x = 0; 
int y = ++x ? ++x : 3;

则最终,y的值为2。
然而,

int x = 0; 
int y = ++x ?  : 3;

最终,y的值居然是1。
怎么两次的结果不一致呢?按照上面的结论,y的值应该都是2才对啊。
那为什么第一种结果y的值为2,而第二种结果y的值为1呢?

结论

据我猜想,? 与: 之间省略的应该是?之前表达式的值,而不是省略的表达式。
这样就可以解释上面所有的情况了。

相关文章

  • iOS 奇妙的三目运算符

    基础 一般情况下,我们使用三目运算符(?:)的语法格式是: 如果表达式expression结果为真,则执行if-t...

  • 18_三目运算符和逗号表达式

    关键词:三目运算符、 三目运算符(a?b:c) 的返回类型、逗号表达式、一行代码实现strlen 1. 三目运算符...

  • 8.JavaScript-三目运算符

    1.什么是三目运算符? 三目运算符又称之为条件运算符 2.三目运算符格式 当条件为真(true)时,返回结果A当条...

  • Java入门:运算符

    Java运算符 运算符的运算对象成为操作数,根据操作数的个数把运算分为: 单目运算符 双目运算符 三目运算符 单目...

  • Python中的三目运算符的作用、语法、示例

    这篇文章介绍三目运算符的作用、语法、利用例子体验一下三目运算符。 三目运算符的作用: 化简代码量的,化简的是非常简...

  • C++<第三篇>:运算符

    根据使用运算符的对象个数,将运算符分为单目运算符、双目运算符、三目运算符。根据使用运算符的对象之间的关系,C++ ...

  • 判断有无封面

    使用三目运算符

  • C语言003 第三节课-学习运算符的优先级2019-06-26

    运算符的类型操作数的数目分单目运算、双目运算和三目运算; 按运算符的功能分类有算术运算符、赋值运算符、逗号运算符、...

  • Java 三目运算符(conditional operator?

    参考 伯乐在线 - 你真的会用 Java 中的三目运算符吗? 三目运算符的官方文档 Java_Chuck - JA...

  • JavaScript③

    函数 一:运算符和表达式 1.三目运算符(三元运算符) 表达...

网友评论

    本文标题:iOS 奇妙的三目运算符

    本文链接:https://www.haomeiwen.com/subject/ymrqxftx.html