06三目运算符在C和C++中的变化

来源:互联网 发布:nginx url 重写 编辑:程序博客网 时间:2024/06/11 11:11

单目运算符是指:运算对象只有一个的运算符;如:取正(+)、取负(-)、取反(^)、或(|)、与(&)等等;

双目运算符是运算对象有两个的;如:加(+)减(-)乘(*)除(/)、自加(++)、自减(–)、逻辑与(||)、逻辑或(&&)、取余(%)、赋值(=)等;

三目运算符在c语言中我知道的就一个(?:),主要是:(表达式1?表达式2:表达式3)其用法是:当表达式1的值为真,执行表达式2,并以表达式2的值为此表达式的值;当表达式1值为假,就跳过表达式2,去执行表达式3,并以表达式3的值作为表达式的值;

首先需要明白什么是三目运算符,百度百科的定义如下:

  • 对于条件表达式b?x:y,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。一个条件表达式绝不会既计算x,又计算y。条件运算符是右结合的,也就是说,从右向左分组计算。例如,a?b:c?d:e将按a?b:(c?d:e)执行。1
  • <表达式1>?<表达式2>:<表达式3>; “?”运算符的含义是: 先求表达式1的值, 如果为真, 则执行表达式2,并返回表达式2的结果 ; 如果表达式1的值为假, 则执行表达式3 ,并返回表达式3的结果。
  • 可以理解为条件 ? 结果1 : 结果2 里面的?号是格式要求。也可以理解为是不是条件成立,条件成立为结果1否则为结果2。


即C++中必须指明:
* 输入的参数是什么类型,int还是double?
* 返回值为什么类型?int还是double,或者其他。



以上若干图片的要点是:
* 要想当左值,即出现在=号左边,则必须为返回的是变量的地址,而不是变量的数值
* 三目运算符在C和C++中的“表现不一样”,说到底还是两个编译器对三目运算符的操作不一样。在C中,三目运算符返回的是变量的值,是一个数值,而在C++中, 三目运算符返回的是变量的本身==即内存首地址。也就是说,C++编译器已经帮程序员提前做了取地址的工作。
具体的原理可参考最后一张图片,如下:

注意黄圈圈处的改动。

0 0