C++Primer学习(4.7 条件运算符)

embedded/2025/3/1 6:21:06/

4.7 条件运算符
条件运算符( ? :)允许我们把简单的if-else逻辑嵌入到单个表达式当中,条件运算符按照如下形式使用:
cond ? exprl : expr2;
其中cond是判断条件的表达式,而expr1和expr2是两个类型相同或可能转换为某个公共类型的表达式。条件运算符的执行过程是:首先求cond的值,如果条件为真对expr1求值并返回该值,否则对 expr2求值并返回该值。举个例子,我们可以使用条件运算符判断成绩是否合格:

string finalgrade=(grade<60)?"fail":"pass";

条件部分判断成绩是否小于60。如果小于,表达式的结果是"fail",否则结果是"pass"。有点类似于逻辑与运算符和逻辑或运算符(&&和I|),条件运算符只对expr1和expr2中的一个求值。
当条件运算符的两个表达式都是左值或者能转换成同一种左值类型时,运算的结果是左值:否则运算的结果是右值。
嵌套条件运算符
允许在条件运算符的内部嵌套另外一个条件运算符。也就是说,条件表达式可以作为另外一个条件运算符的cond或expr。举个例子,使用一对嵌套的条件运算符可以将成绩分成三档:优秀(highpass)、合格(pass)和不合格(fail):

finalgrade=(grade>90)?"high pass"
:(grade<60)?"fail":"pass";

第一个条件检查成绩是否在90分以上,如果是,执行符号?后面的表达式,得到"highpass";如果否,执行符号:后面的分支。这个分支本身又是一个条件表达式,它检查成绩是否在60分以下,如果是,得到"fai1";否则得到"pass"。
条件运算符满足右结合律,意味着运算对象(一般)按照从右向左的顺序组合。因此在上面的代码中,靠右边的条件运算(比较成绩是否小于60)构成了靠左边的条件运算的:分支。
WARNING:随着条件运算嵌套层数的增加,代码的可读性急剧下降。因此,条件运算的嵌套最好别超过两到三层。
在输出表达式中使用条件运算符
条件运算符的优先级非常低,因此当一条长表达式中嵌套了条件运算子表达式时,通常需要在它两端加上括号。例如,有时需要根据条件值输出两个对象中的一个,如果写这条语句时没把括号写全就有可能产生意想不到的结果:

cout<<((grade<60)?"fail":"pass");//输出pass或者 fail
cout <<(grade<60)?"fail":"pass";//输出1或者0!
cout<<grade<60?"fail":"pass";//错误:试图比较cout和60

在第二条表达式中,grade和60的比较结果是<<运算符的运算对象,因此如果grade<60为真输出1,否则输出0。<<运算符的返回值是cout,接下来cout作为条件运算符的条件。也就是说,第二条表达式等价于

cout<<(grade<60);//输出1或者0
cout ?"fail":"pass"; //根据cout的值是true 还是 false 产生对应的字面值

因为第三条表达式等价于下面的语句,所以它是错误的:

cout << grade;//小于运算符的优先级低于移位运算符,所以先输出grade
cout<60?"fail":"pass";//然后比较 cout和 60!

http://www.ppmy.cn/embedded/168984.html

相关文章

深度学习入门:从零开始理解神经网络

欢迎来到深度学习的世界&#xff01;如果你是初学者&#xff0c;可能会对这个领域感到既兴奋又有些迷茫。别担心&#xff0c;我会带你一步步走进这个充满魅力的领域。深度学习是人工智能领域的一个重要分支&#xff0c;它通过模拟人脑的神经网络结构来处理数据。深度学习的核心…

从像素方块到虚拟宇宙:我的世界发展史

### 一、创世之初&#xff1a;独立游戏的诞生&#xff08;2009-2011&#xff09; 2009年5月10日&#xff0c;瑞典程序员马库斯佩尔森&#xff08;Notch&#xff09;发布了《我的世界》的第一个可玩版本。这个最初被称为"Cave Game"的项目&#xff0c;只是佩尔森在…

C语言 第二章 (2)

目录 流程控制结构 顺序结构 分支结构 if _ else语句 单分支 双分支 多分支 实例 switch _case语句 实例 流程控制结构 定义 流程控制结构是用来控制程序中各语句执行顺序的语句&#xff0c;可以把语句组合成能完成一定功能的小逻辑模块。 程序设计中规定的三种流程…

PLC(电力载波通信)网络机制介绍

1. 概述 1.1 什么是PLC 电力载波通讯即PLC&#xff0c;是英文Power line Carrier的简称。 电力载波是电力系统特有的通信方式&#xff0c;电力载波通讯是指利用现有电力线&#xff0c;通过载波方式将模拟或数字信号进行高速传输的技术。最大特点是不需要重新架设网络&#xf…

【HTML】SVG标签的使用方式

SVG&#xff08;Scalable Vector Graphics&#xff09;是一种基于 XML 的矢量图形格式&#xff0c;广泛用于网页和应用程序中。以下是 SVG 标签的详细使用教程&#xff0c;涵盖基本形状、路径、文本、渐变、动画等内容。 1. SVG 基础结构 SVG 图形需要放在 <svg> 标签中…

Google sheet 复制excel内容自动合并单元格问题

解决路径&#xff1a;file-import-upload 这样上传本地的excel源文件&#xff0c;就没有这个问题了

全价值链数字化转型:以美的集团为例,探索开源AI大模型与S2B2C商城小程序源码的融合应用

摘要&#xff1a;在数字经济时代背景下&#xff0c;企业面临着前所未有的竞争压力与市场变革。全价值链的数字化转型&#xff0c;作为提升企业核心竞争力的关键策略&#xff0c;正逐步成为行业共识。美的集团&#xff0c;作为家电行业的领军企业&#xff0c;其基于数字化的全价…

HTML转义和反转义工具类

HTML转义和反转义工具类 package com.common.utils;import cn.hutool.http.HTMLFilter; import org.apache.commons.lang3.StringUtils;/*** 转义和反转义工具类** author lxx*/ public class EscapeUtil {public static final String RE_HTML_MARK "(<[^<]*?>…