当前位置: 首页 > article >正文

语言的副作用

副作用产生于表达式中有至少一处计算,且其中全部或部分计算会影响表达式其他项,这可能产生副作用。编译器的优化很可能凸显副作用。

赋值

副作用并非都是有害的,比如基本的赋值 a = b, 对a而言是产生副作用,但完成了赋值要求。

序列点

  • C语言标准提出了”序列点”的概念,但没有定义序列点以内计算的顺序。序列点(Sequence Point)是一个程序中的特定点,在这个点上,编译器会保证所有的副作用完全生效并且表达式的值被计算出来。
  • 序列点的主要概念来自C语言的未定义行为(Undefined Behavior)规则,这个规则指出如果两个不同的表达式的副作用会影响到同一个对象,而且其中一个表达式的副作用在另一个表达式之前发生,那么结果会是未定义的。
  • C标准规定序列点包含:完整表达式 (full expression)、表示语句结束的分号、逻辑运算符 && 和 ||和逗号运算符。
  • 例如a = i++ + i++ 最终结果不确定,因为两个i++的计算不保证计算顺序。


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!


http://www.kler.cn/a/318271.html

相关文章:

  • PyQt入门指南五十二 版本控制与协作开发
  • Vue计算属性computed
  • java的JJWT 0.91在jdk21中报错的解决方法
  • 卷积、频域乘积和矩阵向量乘积三种形式之间的等价关系与转换
  • websocket初始化
  • 批量重命名Excel文件并排序
  • NPM如何切换淘宝镜像进行加速
  • 什么是前端开发 ?
  • 【优选算法之双指针】No.2--- 经典双指针算法(下)
  • VMware安装ubuntu24.04桌面版
  • Linux下一些命令使用
  • FPGA-Vivado-IP核-虚拟输入输出(VIO)
  • C++【类和对象】(构造函数与析构函数)
  • VSCode好用的插件推荐
  • ARM/Linux嵌入式面经(三七):CVTE
  • 【计算机网络】传输层协议UDP
  • linux 进程间通信之pthread(条件变量共享和互斥锁共享)
  • AIGC基础工具-科学计算和数据处理的重要库NumPy(Numerical Python)简介
  • hbase merge工具
  • 【C++】list容器的基本使用
  • 项目小总结
  • 后台管理系统开箱即用的组件库!!【送源码】
  • 在视频上绘制区域:使用Vue和JavaScript实现交互式画布
  • Leetcode 第 415 场周赛题解
  • 科大讯飞智能体Python SDK接入流程
  • 矩阵快速幂