阅读 79

EasyC++25,三元表达式

这是EasyC++系列的第25篇,简单聊聊三元表达式。

想要追求更好阅读体验的同学,可以点击访问github仓库。

三元表达式

if-else语句非常常用,但在进行一些简单逻辑判断的时候,会显得有些不太简洁。特别是在初始化的时候,比如我们有一个变量,某种情况下赋值成a,另外的情况下赋值成b。

使用if-else语句写出来就是:

int cur; if (condition) {     cur = a; }else {     cur = b; } 复制代码

这当然是没问题的,只是在大量使用的时候会显得有些繁琐。因此C++当中推出了三元表达式对此进行简化,三元表达式也被称为条件运算符(?:)。运算符的通用格式如下:

condition ? expression1 : expression2; 复制代码

问号之前的condition表示一个逻辑运算,如果结果为true,返回expression1的值,否则返回expression2的值。

使用三元表达式之后,刚才上述的代码可以改写成:

int cur = condition ? a : b; 复制代码

这样我们就把6行代码压缩成了一行,简化了代码,但也因此了增加了代码阅读的难度。因此只推荐在简单逻辑判断下使用三元表达式,也不推荐嵌套使用,会使得代码非常难以阅读。

最后分享一个我个人特别喜欢的使用三元表达式的场景,就是结构体排序的cmp函数。

比如我们有这样一个场景,需要使用一个结构体存储两个值x和y,代表一个坐标。我们需要对坐标进行排序,排序的规则是x轴小的在前,如果x轴相等,则y小的在前。

struct P {     int x, y; }; P arr[1000]; 复制代码

大家都知道,要对这样的结构体排序,一种做法是我们可以额外实现一个cmp函数作为sort排序函数的传参。如果不使用三元表达式,那么cmp函数是这样的:

bool cmp(const P &a, const P &b) {     if (a.x == b.x) {         return a.y < b.y;     }else {         return a.x < b.x;     } } 复制代码

使用三元表达式的话,整个逻辑只有一行:

bool cmp(const P& a, const P& b) {     return a.x == b.x ? a.y < b.y : a.x < b.x; } 复制代码

当时在我还是萌新的时候,看到这种写法惊呆了,觉得实在是太简洁太优雅了。怎么样,你们学到了吗?


作者:程序员老梁
链接:https://juejin.cn/post/7028881147065024548

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐