1. 使用宏实现max

    • 注意括号在宏内的使用
  2. #define MAX(x, y) ( ( (x) > (y) ) ? (x) : (y) )

    宏参数连接

    • a##e##b

    • 转化为字符串 #a
  3. const
    • const int* a; 左侧,修饰变量
    • int* const a;右侧,修饰指针
  4. const 与宏的区别
    • #define 预处理器将宏变为代码,属于代码段。
    • const 有类型,在编译阶段会有类型检查,和其他变量一样可以被调用、传递。属于数据段。
  5. const在C++的作用(按照应用情景分别介绍)
    • 定义变量,表示变量为常量
    • 修饰形式参数,表示参数不可以被修改(节省按值传递的构造、复制、析构开销)
    • 修饰返回值,表示返回值为常量
    • 修饰成员函数,表示成员函数内不会修改对象的成员变量。(注意:不可以调用非const 函数
  6. static关键字的用法
    • 静态局部变量:改变存储,从自动存储区(auto)移到静态存储区(static, extern)。从而改变生命周期。
    • 静态全部变量:改变作用域,单文件,初始化一次(0)。
    • 静态函数:改变作用域,单文件。避免多文件冲突。
    • 静态成员变量:属于类,类加载时初始化。类名访问。
    • 静态成员函数:属于类,仅可调用静态成员变量。类名访问。
  7. sizeof 操作符:计算内存大小,用于动态分配等
    • 字符串:strlen() + 1 = sizeof 结束字符'\0'
    • 指针和数组:数组是完整内存,除非处理形式参数。
    • 对象:对齐规则(每个成员的偏移量是自身大小的整数倍;总大小是最宽成员大小的整数倍)
    • 含虚函数:指向虚函数表的指针。
    • 普通继承:sizeof(父类)+ sizeof(子类)
    • 虚拟继承:指针指向虚基类表,表内存储基类的偏移。故保存父类的数据,但仅仅一份。
  8. union对齐:
    • 最大的数据成员
    • 符合每个成员的对齐规则
  9. #pragma pack(n) 设置对齐单元
  10. inline函数
    • 与宏的区别:编译(预处理)时展开调用;本质是函数,存在类型检查等编译功能,可以调试;不存在宏的二义性问题;可以处理对象成员。
    • 适用情形:函数代码少(避免代码膨胀);不包含递归,循环等(优势小);析构和构造函数不建议,建议存取函数。
    • 如何定义:类声明内定义函数默认为内联函数;头文件定义的内联函数(定义时必有inline关键字)

C/C++程序基础 (二)常用知识点的更多相关文章

  1. JAVA并行程序基础二

    JAVA并行程序基础二 线程组 当一个系统中,如果线程较多并且功能分配比较明确,可以将相同功能的线程放入同一个线程组里. activeCount()可获得活动线程的总数,由于线程是动态的只能获取一个估 ...

  2. 微信小程序基础之常用控件text、icon、progress、button、navigator

    今天展示一下基础控件的学习开发,希望对大家有所帮助,转载请说明~ 首先延续之前的首页界面展示,几个跳转navigator的使用,然后是各功能模块的功能使用 一.text展示 使用按钮,进行文字的添加与 ...

  3. Java基础之常用知识点博客汇总

    正则: 正则表达式 :https://www.cnblogs.com/lzq198754/p/5780340.html 正则表达式大全:https://blog.csdn.net/zpz2411232 ...

  4. python开发基础(二)常用数据类型调用方法

    1 数字: int 2 3 int : 转换,将字符串转化成数字 4 num1 = '123' 5 num2 = int (a) 6 numadd = num2 +1000 7 print(num2) ...

  5. ROS_Kinetic_11 ROS程序基础Eclipse_C++(二)

    ROS_Kinetic_11 ROS程序基础Eclipse_C++(二) 编写简单的Service和Client (C++): http://wiki.ros.org/cn/ROS/Tutorials ...

  6. Java并发程序设计(二)Java并行程序基础

    Java并行程序基础 一.线程的生命周期 其中blocked和waiting的区别: 作者:赵老师链接:https://www.zhihu.com/question/27654579/answer/1 ...

  7. 小程序基础知识点讲解-WXML + WXSS + JS,生命周期

    小程序基础 小程序官方地址,小程序开发者工具,点击此处下载.在微信小程序中有一个配置文件project.config.json,此文件可以让开发者在不同设备中进行开发. 微信小程序共支持5种文件,wx ...

  8. Java基础学习总结(40)——Java程序员最常用的8个Java日志框架

    作为一名Java程序员,我们开发了很多Java应用程序,包括桌面应用.WEB应用以及移动应用.然而日志系统是一个成熟Java应用所必不可少的,在开发和调试阶段,日志可以帮助我们更好更快地定位bug:在 ...

  9. JAVA常用知识点及面试题总结

    1. String.StringBuffer.StringBuilder三者区别? (1)三者在执行速率上的比较: String<StringBuffer<StringBuilder 原因 ...

  10. 2、JavaScript 基础二 (从零学习JavaScript)

     11.强制转换 强制转换主要指使用Number.String和Boolean三个构造函数,手动将各种类型的值,转换成数字.字符串或者布尔值. 1>Number强制转换 参数为原始类型值的转换规 ...

随机推荐

  1. POJ2758 Checking the Text 哈希

    注意到插入次数挺少的,于是每次暴力重构,然后哈希+二分 #include<cstdio> #include<iostream> #include<algorithm> ...

  2. MD5Utils

    import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import com.yundae ...

  3. QQ的全国地址编码

    D:\Program Files (x86)\Tencent\QQ\I18N\2052\LocList.xml

  4. Java匹马行天下之JavaWeb核心技术——JSP

    JSP动态网页技术 一.JavaWeb简介 一.什么是JavaWeb? JavaWeb是用Java技术来解决相关web互联网领域的技术总称. 需要在特定的web服务器上运行,分为web服务器和web客 ...

  5. pat1079. Total Sales of Supply Chain (25)

    1079. Total Sales of Supply Chain (25) 时间限制 250 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...

  6. springmvc之Hello World及常用注解

    步骤: 加入jar包 在web.xml 中配置DispacherServlet 加入SpringMVC 配置文件springmvc.xml 编写请求处理器(action/controller) 编写视 ...

  7. 自己动手实现STL 03:内存基本处理工具(stl_uninitialized.h)

    一.前言 前面两篇已经编写了内存配置器和建构解构工具函数.这里,就准备编写并介绍下内存基本处理工具函数.比如uninitialized_copy().uninitialized_copy和 unini ...

  8. 面向对象(OOP)三

    一.面向对象基础原则 1)单一职责原则(类要写得小而精,低耦合) 内部类 单列模式 对于单一职责原则,其核心思想为:一个类,最好只做一件事,只有一个引起它的变化.单一职责原则可以看做是低耦合.高内聚在 ...

  9. springMvc 添加定时任务

    1.创建定时类 import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stere ...

  10. filter 拦截ajax请求

    1.filterpublic class SessonFilter implements Filter { private static Logger log = LoggerFactory.getL ...