条件操作符(三元操作符)

C++中有一个需要注意的操作符,这个操作符石C++中唯一的三元操作符,这个操作符就是条件操作符。

用法:

cond ? value1 : value2;

简介:

这个表达式的求解顺序是计算cond的值是否等于0,如果等于0(也就是false),那么返回value2(如果value2是一个表达式,那么计算表达式的值并返回计算结果),否则返回value1(如果value2是一个表达式,那么计算表达式的值并返回计算结果)。

使用三元操作符的时候需要注意以下几点:

(1)避免三元操作符的深度嵌套。如下,虽然对于程序猿来说比较高大上,但是如果自己疏忽某些地方可能造成意想不到的结果,另外这样的代码可读性下降。

int value =   i > j ? i > k ? i : k : j > k ? j : k;

分析上边的表达式的时候我们需要遵循一个原则:三元操作符需要 ?和:作为一个整体。根据从左向右看的原则,第一个问号和倒数第二个冒号匹配.

(2)条件表达式的优先级相对比较低,最好把这个操作符所做的操作用一个括号括起来。这样一方面避免忽略操作符的优先级造成意想不到的结果,同时使得代码可读性提高。下边列举几个primer上的例子:

cout << (i < j ? i : j);// ok: prints larger of i and j
cout << (i < j) ? i : j;// prints 1 or 0!
cout << i < j ? i : j;// error: compares cout to int

第一个表达式没有什么问题。

第二个表达式就有问题了,他把i和j的比较结果作为cout的操作数,输出0或者1,然后把cout的操作结果作为条件来判断三元操作符的结果。如果cout的值不等于0,那么返回三元操作符的结果是i,否则为j。

时间: 2024-10-07 18:24:53

条件操作符(三元操作符)的相关文章

模拟三元操作符和真正三元操作符的区别

1 // 三元操作符是用来处理简单的判断的 2 a>b?a:b 3 // 写成if的情况 4 if(a>b) 5 return a; 6 else 7 return b; 8 9 //或许用and和or来模拟 10 a>b and a or b 11 //但是不要用模拟的三元操作符干复杂的事,例如: 12 bool value1 and bool value2 or bool value3 13 例如在这情况下当value1 = false,value2 = true, value3 =

java===java基础学习(2)---运算符,三元操作符,数学函数

主要介绍运算符,和数学函数以及三元运算符: package testbotoo; public class test1 { public static void main(String[] args) { int a = 122; System.out.println("调用operation的结果是:"+operation(a)); //调用下面定义的方法 }; public static int operation(int v){ int xe = v + 1; int and =

RxJava操作符——条件和布尔操作符(Conditional and Boolean Operators)

RxJava系列教程: 1. RxJava使用介绍 [视频教程] 2. RxJava操作符 ? Creating Observables(Observable的创建操作符) [视频教程] ? Transforming Observables(Observable的转换操作符) [视频教程] ? Filtering Observables(Observable的过滤操作符) [视频教程] ? Combining Observables(Observable的组合操作符) [视频教程] ? Erro

三元操作符

一.三元操作符: 表达式?值1:值2: 如果表达式为真,返回值1: 如果表达式为假,返回值2: 二.练习 import java.util.Scanner; //导入包,才能使用Scanner public class Demo { public static void main(String[] args) { int a ; Scanner scan=new Scanner(System.in); System.out.print("请从键盘上输入一个数(1-7):"); a=sc

Operation之条件和布尔操作符

amb 当传入多个Observable到amb操作符时, 他将取第一个发生元素或产生事件的Observable, 然后只发出他的元素. 并且忽略其他的Observable let subject191 = PublishSubject<Int>() let subject192 = PublishSubject<Int>() let subject193 = PublishSubject<Int>() subject191 .amb(subject192) .amb(s

python三元操作符

#比较大小更简单了 x,y=3987,24361 small=(x if x<y else y) print(small) #方法一:比较三个数的大小找出较大的一个 x,y,z=8,1,13 if x<y: small=x else: small=y if small<z: print(small) else: small=z print(small) #方法二:比较三个数的大小找出较大的一个 x,y,z=8,9,1 small=(x if x<y else y) small=(s

JS基本概念 -- 操作符 -- 布尔操作符

布尔操作符一共有三个: 非(Not).与(AND).或(OR) 逻辑非逻辑非操作符由一个叹号(!)表示,可以应用于ECMAScript中的任何值.无论这个值是什么类型,这个操作符都会返回一个布尔值.逻辑非操作符首先将他的操作数转换为一个布尔值,再对其求反. //1.如果操作数是一个对象,返回false var o = { name: "ss" }; alert(!o); //false var o1 = {}; alert(!o1); //false //2.如果操作数是一个空字符串,

操作符-一元操作符

只能操作一个值的操作符叫一元操作符. 1.递增和递减操作符: 递增和递减都有两个版本:前置型和后置型. 前置型: 在执行前置的递增和递减操作时,变量的值都是在语句被求值前改变的.(在计算机科学领域,这种情况通常被称做副效应). var age=29; var anotherAge=--age+2; alert(age);//28 alert(anotherAge);//30 前置递增和递减操作与执行的语句的优先级相等,因此整个语句会从左至右被求值. var num1=2; var num2=20

操作符-位操作符

1.按位非(NOT) 按位非操作符由一个波浪线(~)表示,执行安慰非的结果就是返回数值的反码.按位非操作的本质:操作数的负值-1. var num=25; var num2=~num1; alert(num2);//-26 2.按位与(AND)按位与操作符由一个和号字符(&)表示,它有两个操作符数. 第一个数值的位 第二个数值的位 结果 1 1 1 1 0 0 0 1 0 0 0 0 简而言之,按位与操作只在两个数值的对应位置都是1时才返回1,任何一位是0,结果都是0:例如: var resul