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

C++ 改善程序的具体做法 学习笔记

1、尽量用const enum inline替换#define

因为#define是做预处理操作,编译器从未看见该常量,编译器刚开始编译,它就被预处理器移走了,而#define的本质就是做替换,它可能从来未进入记号表

解决方法是用常量替换宏

语言常量会被编译器看到,会进入记号表内

#define不注重域的范围,而const可以,#define不能定义类常量,也不能提供封装性,比如private等

用#define定义“函数”问题会非常大

int a = 5, b = 0;

#define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))

如果调用CALL_WITH_MAX(++a, b); //a会累计加两次,(++a) > (b) ? (++a) : (b);

因为++a > b,所以使用++a的值(三目运算符)

如果调用CALL_WITH_MAX(++a, b + 10);就会累计加一次,因为a < b了,所以取值b,之加了一次

在迭代器中,若迭代器不做值修改那么可以用const_iterator,以此提高性能

例如:

const std::vector<int>::iterator iter = vec.begin();//iter的作用类似于T* const

*iter = 10;//正确

++iter;//错误

std::vector<int>::const_iterator citer = vec.begin();//iter的作用类似于const T*

*citer = 10;//错误

++citer;//正确

const加在返回值身上:

const Rational operator* (const Rational& lhs, const Rational& rhs);

如果不加,那么我可以写成:Rational a, b, c;

(a * b) = c;//而a*b返回的是一个右值

 

 

http://www.lryc.cn/news/145122.html

相关文章:

  • Unity 之 GameObject.Find()在场景中查找指定名称的游戏对象
  • flink on yarn with kerberos 边缘提交
  • NodeJS的简介以及下载和安装
  • 量化面试-概率题
  • 【spark】java类在spark中的传递,scala object在spark中的传递
  • php 文字生成图片保存到本地
  • 面试手撕—二叉搜索树及其后序遍历
  • Java数据结构面试题以及答案
  • Java——它要求用户输入一个整数(实际上是一个字符串),然后计算该整数的平方值,并将结果输出。
  • 【科研论文配图绘制】task6直方图绘制
  • Leetcode刷题:395. 至少有 K 个重复字符的最长子串、823. 带因子的二叉树
  • java八股文面试[多线程]——Synchronized的底层实现原理
  • C#,《小白学程序》第三课:类、类数组与排序
  • 史上最全AP、mAP详解与代码实现
  • 百数应用中心——生产制造管理解决方案解决行业难题
  • 《存储IO路径》专题:IO虚拟化初探
  • Springboot2.0快速入门(第一章)
  • Flink流批一体计算(17):PyFlink DataStream API之StreamExecutionEnvironment
  • javeee spring cglib动态代理
  • 【Docker】Dockerfile介绍
  • 两个hdfs之间迁移传输数据
  • C++ 缺失的数字
  • JVM,JRE和JDK的区别
  • 合宙Air724UG LuatOS-Air LVGL API控件--日历 (Calendar)
  • [python]问题:pandas处理excel里的多个sheet
  • [MySQL] MySQL基础操作汇总
  • C语言每日一题 ---- 打印从1到最大的n位数(Day 1)
  • 2023-08-23 LeetCode每日一题(统计点对的数目)
  • LLMs之Code:SQLCoder的简介、安装、使用方法之详细攻略
  • 数学建模(四)整数规划—匈牙利算法