开门见山 思维导图奉上
- 引用和指针的区别
- 宏
- 宏的优缺点
- C++中替代宏
- C和C++的区别
!!!
详细部分参考该博客:从C快速入门C++ (命名空间、引用、函数重载)
!!!
引用和指针的区别
● 引用就是个别名,可以看作编译器自动完成取地址,解引用的常量指针(T * const
)。
● 引用与指针语法层面不同点(概念,特性)
(1) 引用是一个变量的别名(共用同一块内存),而指针(变量)存放变量的地址。
(2) 引用在定义时必须要初始化,不能先声明再赋值,而指针可以。
(3) sizeof()
含义不同:sizeof 引用结果是引用类型的大小,而 siezof 指针始终是地址大小(32位下 4字节,64位下8字节)
(4) 访问方式不同: 指针需要解引用, 引用不需要。
(5) 引用自增 +1 是所引用的变量加一, 而指针 +1 是加上指针所指向类型的大小。
(6) 有多级指针(二级指针),没有多级引用。
(7) 没有 NULL 引用, 有 NULL 指针。
(8)引用没有int & const因为引用本身就不可变, 而const int &表示常引用;
指针有int * const(指针常量)表示指针本身指向不能改变, const int* 或 int const *(指向常量的指针)
宏
#define MIN(a,b) ((a)<=(b)?(a):(b))
宏的优缺点
宏常量
优点:
1. 增强代码复用性(方便修改)
2. 降低出错率
3. 提高命名可读性
缺点:
1. 不方便调试(因为在编译预处理阶段就已经做了宏替换)
2. 没有类型检查,不安全(出错不容易排查)
宏函数
优点:
1. 并不是函数,不会有函数栈帧开销,(预处理阶段将宏名替换成宏体) 提高性能
2. 减少代码重复书写的工作
缺点:
1. 在预处理阶段替换,无法调试
2. 没有类型检查,安全性低
3. 嵌套定义过多会降低程序可读性和维护性,容易出错
4. 当有表达式时可能会由于操作符优先级出现意外结果,最好需要加括号(仍有可能出错)
C++中替代宏
常量定义使用 const(用const修饰在编译时全部替换成初始值)
C/C++中const的存储位置
宏函数改用内联函数
- 在编译期间展开,没函数栈帧开辟的开销
- 是函数,有返回值、参数列表,编译时会进行类型检查
- vs debug模式下默认不会展开,可以调试
缺点:可能引起代码量膨胀;是建议性关键字具体看编译器的处理,又可能造成理解二义性。
C和C++的区别
C++在C的基础上增添类
C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制);
而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。
函数命名(重载)
char 类型
const
struct
bool类型
详见:C++与C的区别终于说清楚了