news 2026/7/15 4:00:22

C语言中的惰性运算

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言中的惰性运算

在使用指针进行访问时,往往我们比较担心空指针访问崩溃。这时候我们可以通过逻辑与&&来直接短路这种异常情况。这是实际是用的是惰性运算,那什么是惰性运算,我们用怎么运用呢?各个语言间惰性运算又有什么区别呢?
一、C语言的惰性运算的定义
C语言的惰性运算(短路求值)仅针对逻辑&&、逻辑或||两个运算符
1、逻辑与A&&B的惰性规则
如果A表达式的结果为假(0),整个表达式必然为假,不会执行、计算右边的B,直接短路。
2、逻辑与A||B的惰性规则
如果A表达式的结果为真(非0),整个表达式必然为真,不会执行、计算右边的B,直接短路。
说明:+、-、、/、>、<、==等运算符没有惰性运算,两侧一定会完整求值。*
二、C语言的惰性运算的示例
1、逻辑与短路的惰性

#include<stdio.h>#include<windows.h>#include<math.h>intfunc(){printf("func()被执行了!\n");return1;}intmain(intargc,charconst*argv[]){/* code */SetConsoleOutputCP(65001);SetConsoleCP(65001);inta=0;if(a&&func()){printf("进入到if分支\n");}printf("程序结束\n");return0;}

运行结果:

a=0时,a&&func():左侧为假,右侧的func()不执行
当a=1时,func()会被执行

2、逻辑或短路

当a=1时,不需要计算func,直接运行


当a=0时,执行func的判断

注意:短路导致自增等运算失效,在实际编码时,是需要注意的。
三、类C语法语言惰性运算的区别
共同点:都对&&(逻辑与)、||(逻辑或)做短路惰性,规则和C一致(A&&B:A假则B不执行,A||B:A真则B不执行)
不同点:

语言与C不同的地方备注
C++新增重载运算符如果重载operator与或operator或,短路特性会消失,两侧一定全求值
java多出非短路版本与、或是完整求值,无论左边真假,左右都算
JavaScript短路逻辑和C一致,但是返回值规则不同 ;空值合并??也支持短路惰性,c没有这个运算符JS会直接返回原始表达式的值,常用来做默认值
Go严格布尔类型,只能放布尔表达式C可以放任意数字、指针当真假
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 4:00:07

构建开源语音合成系统:eSpeak-NG与MBROLA深度集成指南

构建开源语音合成系统&#xff1a;eSpeak-NG与MBROLA深度集成指南 【免费下载链接】espeak-ng eSpeak NG is an open source speech synthesizer that supports more than hundred languages and accents. 项目地址: https://gitcode.com/GitHub_Trending/es/espeak-ng …

作者头像 李华
网站建设 2026/7/15 3:59:56

三大主流Re-ID数据集深度解析:从Market1501到MSMT17_V2

1. Re-ID数据集的核心价值与应用场景行人重识别&#xff08;Re-ID&#xff09;技术作为计算机视觉领域的重要研究方向&#xff0c;其核心价值在于解决跨摄像头场景下的行人身份匹配问题。这项技术在智能安防、智慧零售、智慧城市等实际场景中发挥着关键作用。而高质量的数据集正…

作者头像 李华
网站建设 2026/7/15 3:59:24

C#中的静态成员

在类内的成员变量&#xff0c;成员方法&#xff0c;成员属性之前提添加了static修饰的成员成为类的静态成员&#xff0c;静态成员允许在不进行实例化对象的前提下进行使用。静态成员在程序开始运行时就被分配内存空间&#xff0c;在程序退出时释放内存空间&#xff0c;其与程序…

作者头像 李华
网站建设 2026/7/15 3:59:17

GaussianSplatting训练教程

下面的链接是配置环境的教程&#xff0c;可自行学习配置。 https://blog.csdn.net/sakuya__/article/details/135376331?spm1001.2014.3001.5506 下面四个命令是我在尝试从录制好的roasbag提取出一组图片&#xff0c;以供3DGS训练&#xff0c;无ros基础可不予理会。 python3 …

作者头像 李华
网站建设 2026/7/15 3:59:12

实时双语字幕系统底层原理与工程实践

实时双语字幕工具——这个需求我太熟悉了。过去三年&#xff0c;我给二十多个语言学习类App、跨境会议平台、高校国际课程项目做过字幕系统方案设计&#xff0c;也亲手搭过七套不同技术路径的实时双语字幕链路。不是调几个API就完事&#xff0c;而是从麦克风拾音信噪比开始算起…

作者头像 李华
网站建设 2026/7/15 3:57:22

时序数据库InfluxDB监控数据实战——Line Protocol、Retention Policy、连续查询与Grafana仪表盘

文章目录 每日一句正能量 一、前言:为什么需要专门的时序数据库? 二、Line Protocol:极简高效的时序数据写入协议 2.1 数据格式解析 2.2 实战写入示例 方式一:HTTP API 写入 方式二:Telegraf 自动采集 方式三:Python 客户端写入 2.3 写入最佳实践 三、Retention Policy:…

作者头像 李华