Cherno C++学习笔记 P37 三元运算符

这里我们穿插讲一下C++里面的三元运算符。三元运算符其实很简单,就是?与:两个符号的结合,本质上只是一个if else语法的语法糖。这个符号可以让我们根据一个条件来赋值。

我们举一个简单的例子来体现一下三元运算符的用法:

int s_speed = 1;
int s_level = 2;
if (s_level > 5)s_speed = 10;
elses_speed = 5;

我们在这里用了if else语句来给s_speed变量赋值,根据s_level的高低,s_speed会有不同的值。看起来是一个非常简单的逻辑。那么如果我们用三元运算符应该怎么改写?

s_speed = s_level > 5 ? 10 : 5;

可以看到,我们把一个四行才能描述清楚的代码改写成了只需要一行就可以表示。这个逻辑也很清楚,?前面是一个判断,判断s_level和5之间的大小关系,如果是true的话,取:前面的值;如果是false的话,取:后面的值。这样的话我们就用一行表示了一整个if else。

对于可读性这个角度,这个写法其实是见仁见智的,因为如果习惯了这种写法,有可能就会觉得这样无所谓。但是对于不习惯的,可能会觉得破坏了可读性。

对于性能上来讲,如果是使用string类型的话,采用三元运算符通常会比if else更快一些。如下所示,如果我们根据条件来判断一个string类型的变量应该赋予什么值:

std::string name;
if (s_level > 5)name = "Cherno";
elsename = "Unknown";

我们可以看到,我们需要先创建一个空字符串,然后再覆盖掉它。

但是如果我们使用三元运算符,我们会得到这样的代码:

std::string name = s_level > 5 ? "Cherno" : "Unknown";

可以省去一个建立空字符串再覆盖的过程,会速度更快。而且三元运算符返回值有一个优化的算法,所以也会更快一些。

当然,三元运算符还可以扩展,可以从只有一个判断条件扩展到多个判断条件,而且也会有对应的多个结果:

s_speed = s_level > 5 ? s_level > 10 ? 15 : 10 : 5;

这样的话多个问号放在一起,如果我们两个条件都满足,会执行第一个结果;如果第一个满足第二个不满足,会执行第二个结果;如果两个都不满足,会执行第三个结果。

甚至我们一个判断条件里面还可以有好几个条件,我们可以用与或这种运算符号链接起来:

s_speed = s_level > 5 && s_level < 100 ? s_level > 10 ? 15 : 10 : 5;

但是这样写太疯狂了!所以我们通常不会这么写。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/889478.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【伪代码】数据结构-期末复习 线性表

目录 例1 矩阵相乘 线性表 2.1 线性表的类型定义 例2-1 求并集 LALA∪LB 例2-2 有序表归并 2. 2 线性表的顺序表示和实现 1&#xff0e;构造空表 2&#xff0e;插入 3&#xff0e;删除 4&#xff0e;定位 顺序表的优点&#xff1a; 顺序表的缺点&#xff1a; 例…

Linux 设备树

学习设备树之前你需要知道什么&#xff1f; 因为设备树描述了整个芯片和开发板等所有硬件信息内容&#xff0c;所以他的信息量是非常庞大的&#xff0c;RK的linux的设备树算下来大概就有九千多行&#xff0c;大家不要被这个数字给吓到&#xff0c;这些内容都是原厂工程师写的&a…

MySQL有哪些高可用方案?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL有哪些高可用方案?】面试题。希望对大家有帮助&#xff1b; MySQL有哪些高可用方案? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 高可用方案旨在确保数据库系统的高可靠性、低宕机时间、以及在硬件故障…

An error happened while trying to locate the file on the Hub and we cannot f

An error happened while trying to locate the file on the Hub and we cannot find the requested files in the local cache. Please check your connection and try again or make sure your Internet connection is on. 关于上述comfy ui使用control net预处理器的报错问…

Nginx之配置防盗链(Configuring Anti-hotlinking in Nginx)

运维小白入门——Nginx配置防盗 什么是防盗链&#xff1a; 防盗链技术主要用于防止未经授权的第三方或域名访问网站的静态资源。例如&#xff0c;一个网站可能拥有独特的图片素材&#xff0c;为了防止其他网站通过直接链接图片URL的方式访问这些图片&#xff0c;网站管理员会采…

【AI日记】24.12.13 kaggle 比赛 2-3 大扫除、断舍离、自己做饭

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 参加&#xff1a;kaggle 比赛 Regression with an Insurance Dataset参考&#xff1a;kaggle 回归类入门比赛 House Prices - Advanced Regression Techniques内容&#xff1a;构建自己的EDA&#xff08…

【echarts】数据过多时可以左右滑动查看(可鼠标可滚动条)

1. 鼠标左右拖动 在和 series 同级的地方配置 dataZoom&#xff1a; dataZoom: [{type: inside, // inside 鼠标左右拖图表&#xff0c;滚轮缩放&#xff1b; slider 使用滑动条start: 0, // 左边的滑块位置&#xff0c;表示从 0 开始显示end: 60, // 右边的滑块位置&#xf…

pytest -s执行的路径

pytest -s执行的路径&#xff1a; 直接写pytest -s&#xff0c;表示从当前路径下开始执行全部.py的文件。 执行具体指定文件&#xff1a;pytest -s .\testXdist\test_dandu.py 下面这样执行pytest -s 会报找不到文件或没权限访问&#xff0c; 必须要加上具体文件路径pytest -s…

内网跨“边界”

背景 “边界”通常是指内网与外网之间的那条边界&#xff0c;在内网中&#xff0c;边界也包括各个区域之间的边界。本篇文章主要介绍在内网各种环境中的shell反弹、内网穿透及文件传输方面常用的一些方法和工具&#xff0c;利用这些方法来跨越内网中的层层边界。 当我们获取到…

Docker的镜像

目录 1. 镜像是什么&#xff1f;&#xff1f;2. 镜像命令详解2.1 镜像命令清单2.2 docker rmi命令2.3 docker save命令2.4 docker load命令2.5 docker history命令2.6 docker import命令2.7 docker image prune命令2.8 docker build命令 3. 镜像的操作4. 离线迁移镜像5. 镜像存…

Vue Web开发(五)

1. axios axios官方文档 异步库axios和mockjs模拟后端数据&#xff0c;axios是一个基于promise的HTTP库&#xff0c;使用npm i axios。在main.js中引入&#xff0c;需要绑定在Vue的prototype属性上&#xff0c;并重命名。   &#xff08;1&#xff09;main.js文件引用 imp…

【合作原创】使用Termux搭建可以使用的生产力环境(六)

前言 在上一篇【合作原创】使用Termux搭建可以使用的生产力环境&#xff08;五&#xff09;-CSDN博客我们讲到了如何美化xfce4桌面&#xff0c;达到类似于Windows的效果&#xff0c;这一篇将继续在上一篇桌面的基础上给我们的系统装上必要的软件&#xff0c;让它做到真正可以使…

docker简单私有仓库的创建

1&#xff1a;下载Registry镜像 导入镜像到本地中 [rootlocalhost ~]# docker load -i registry.tag.gz 进行检查 2&#xff1a;开启Registry registry开启的端口号为5000 [rootlocalhost ~]# docker run -d -p 5000:5000 --restartalways registry [rootlocalhost ~]# dock…

AI技术架构:从基础设施到应用

人工智能&#xff08;AI&#xff09;的发展&#xff0c;正以前所未有的速度重塑我们的世界。了解AI技术架构&#xff0c;不仅能帮助我们看懂 AI 的底层逻辑&#xff0c;还能掌握其对各行业变革的潜力与方向。 一、基础设施层&#xff1a;AI 技术的坚实地基 基础设施层是 AI 技…

Python Turtle 实现动态时钟:十二时辰与星空流星效果

在这篇文章中&#xff0c;我将带你通过 Python 的 turtle 模块构建一个动态可视化时钟程序。这个时钟不仅具备传统的时间显示功能&#xff0c;还融合了中国古代的十二时辰与八卦符号&#xff0c;并通过动态星空、流星效果与昼夜背景切换&#xff0c;为程序增添了观赏性和文化内…

使用CSS变量和JavaScript实现鼠标跟随渐变

实现鼠标跟随渐变效果的详细过程&#xff1a; 1. HTML 结构 我们在 HTML 中创建了一个 <div> 元素&#xff0c;用于展示渐变效果。这个元素的 ID 是 gradient-box&#xff0c;方便在 JavaScript 中进行操作。 2. CSS 样式 CSS 变量&#xff1a;在 :root 中定义了两个…

监控易监测对象及指标之:宝兰德中间件JMX监控指标解读

监控易作为一款全面的IT监控软件&#xff0c;能够为企业提供深入、细致的监控服务&#xff0c;确保企业IT系统的稳定运行。在本文中&#xff0c;我们将详细解读监控易针对宝兰德中间件JMX的监控指标&#xff0c;以帮助用户更好地理解和应用这些监控数据。 监测指标概览&#x…

数据仓库-集群管理

主要介绍操作类问题中的集群管理问题。 无法成功创建数据仓库集群时怎么处理&#xff1f; 请检查用户账户余额是否少于100元&#xff0c;是否已经没有配额创建新的数据仓库集群&#xff0c;以及是否存在网络问题。 如账户余额、配额、网络均未发现问题&#xff0c;请联系客户…

期魔方风控模型之委托失败补单程序

你知道吗&#xff1f;只需简单设置&#xff0c;期魔方风控模型就能自动处理风控委托失败的订单&#xff0c;进行补单操作。 那么&#xff0c;这种功能适用于哪些场景呢&#xff1f;让我们一起来探讨一下&#xff01; 在实际交易中&#xff0c;我们有时会遇到在任意交易终端&a…

ubuntu系统的docker安装(2)

查看系统版本 lsb_release -asudo systemctl status docker查看docker是否安装成功 docker pull拉取镜像不成功/docker run不成功 可能有多种原因&#xff1a;网络链接不稳定&#xff0c;没有重启docker&#xff0c;可以先将docker源设置为国内镜像源 sudo systemctl rest…