重载
函数符号的生成规则
C 只和函数名有关系
C++ 函数原型有关:
1.函数名
2.参数类型
3.参数顺序:参数个数,参数类型,参数顺序
重载3要素:1.同名 2.参数不同 3.同作用域
详细可见https://blog.csdn.net/choudan8888/article/details/83751418
new/malloc 的区别
1.new 是一个关键字,malloc是一个函数
2.new在自由存储区域开辟内存 malloc堆上开辟内存
3.new开辟内存并且初始化 operator new malloc单纯开辟内存无初始化
4.new的operator new可以重载 malloc不能重载
5.new可以调用malloc但是malloc不能调用new(new里面可以进行重载,重载时可以调用malloc)
6.内存开辟失败 new会抛出异常 malloc返回NULL
7.new可以开辟常量,但是malloc不能
new
int a;
char *pc = new(&a)char('a'); //重定义new 在a的内存上分配一个字节给pc(自由存储区)
malloc 原型void *malloc(size_t size)
int *p = malloc(1)
error malloc返回一个无符号的指针类型,其他类型可以转化成void *,但是void *转化成其他类型需要强转, int *是要四个字节,这里只开辟一个
free 原型 void (void *ptr)
详细可见https://blog.csdn.net/choudan8888/article/details/83991936
const
C语言中是常变量
编译阶段 常变量有没有做左值,其他的处理和变量是一样的
C中const修饰的全局变量 global
C++中是常量
在编译阶段把常量使用的地方替换成常量初始化的值
C++中const修饰的全局变量 local extern
1.常量一定要初始化
2.不允许做左值
3.不允许间接访问来修改常量的值,杜绝间接访问的风险
在fun函数的普通变量在栈中存储,栈帧回退之后这些变量的值都会被清空,静态变量的存储在.data段,栈帧回退的时候不会被清退,所以这个变量的生存周期会超脱这个函数的生命周期,但是无法访问这个静态变量,除非将这个值返回出来
详细可见
https://blog.csdn.net/choudan8888/article/details/83821546
引用 & 引用就是别名 引用的底层是以指针做支持
1.引用一定要初始化
2.引用不能引用引用取地址的数据
3.引用不能改变,会产生歧义
4.引用变量只能使用引用变量所引用的变量的数值
详细可见https://blog.csdn.net/choudan8888/article/details/83868127
内联inline 编译阶段在代码的调用点直接代码展开
1.inline和static函数的区别
1.内联函数没有栈帧的开销,static有栈帧的开销
2.inline在调用掉直接展开 static 函数符号展开
inline和宏的区别
1.inline在编译阶段处理 宏在预编译阶段处理
2.inline有类型接查和安全检查 宏无类型检查和安全检查
inline注意事项
1.实现在.h文件
2.inline函数只在relise版本生效
3.只是给编译器一个建议
4.递归,循环,switch分支,不能用内联
5.内联是基于实现,不基于声明
inline缺点:以代码膨胀为代价 空间换时间
建议
1.开栈的开销 > 执行的开销 建议设为inline
2.开栈的开销 < 执行的开销 不建议设为inline
详细可见https://blog.csdn.net/choudan8888/article/details/83751418
函数默认值
1.从右向左依次赋值,入栈时最左边的值在最上面,实参匹配是从左向右,刚好就是第一个参数
2.默认值不能重复赋值,会对编译器产生二义性
3.默认值一般写在声明上
详细可见https://blog.csdn.net/choudan8888/article/details/83751418
C和C++的相互调用
extern“C”
1.C++调用C C++源文件extern“C”
2.C调用C++ C++源文件可以修改 extern"C"
C++源文件不可修改 加重间层.cpp
3.不明确编译器 #ifdef_cplusplus
namespace
using namespace std; using 指示符
using std::cout; using 声明
namespace 同名合并
structh和class的区别
在C语言中空结构体的大小是0,C++中空结构体的大小是1
C语言中struct默认权限是public C++中class默认权限是private