c和cpp比较(1)--读书笔记3
来源:互联网 发布:无法开启网络发现 编辑:程序博客网 时间:2024/06/01 09:46
一、函数调用约定:(1)_cdecl(默认) (2)_stdcall (3)_fastcall
调用约定决定了函数的三个方面:参数入栈、平衡堆栈(程序调用前后使得堆栈保持不变的过程)
二、call指令(1)先把下一行指令的地址入栈(2) 转到调用的子程序
三、带有默认值的函数:给默认值只能从右向左给,定义处或声明处都可以给。默认值只能给一次。
编译器在编译左边的参数的默认值时,一定要让编译器知道右边参数已经有默认值了。
int sum(int a,int b=10);(yes)
int sum(int a=5,int b); (no)
四、内联(inline)函数:只在release版本起作用
1.inline:(1)在编译过程,在函数的调用点,把函数的代码全部展开;
(2)inline函数不产生符号,所有内联函数只在本文件可见。
inline只是对编译器的一个建议,最终由编译器决定
2.宏:在预处理阶段,字符串替换
3.inline函数是一种更安全(类型检查)的宏
4.内联函数和普通函数的区别:(1)内联函数没有标准的函数栈帧的开辟和回退;(只在release版本起作用,在debug版本中,inline函数的调用也需要栈帧的开辟和回退。)
(2)inline函数只有当前文件可见。
5. 内联函数和static函数的区别:(1)static函数有栈帧的开辟和回退,inline函数没有。
(2)static函数产生符号(local),inline函数不产生符号
链接器只处理global符号(符号解析---->符号分配内存虚拟地址---->符号的重定位),不看local符号
6. 普通函数和static函数的区别:普通函数产生的符号的属性为global ,
static函数产生的符号的属性为local
五、函数的重载
1. ①函数名相同、参数列表不同;②且在同一作用域,可以构成重载;③对实参的值是否有影响 const 或 volatile所修饰的 指针或者引用 可以作为函数重载的前提条件。
2.不能仅通过返回值不同进行重载
3.静多态:函数的重载和模板
动多态:继承里面的多态(虚函数)
4.编译器的类型转换
5.C和C++之间的互相调用
(1) C++程序 调用 C语言代码: extern “C” 按C语言规则生成符号
(c++编译器解析c)
(声明时用extern C)
(2) C程序 调用 C++代码: extern “C” 按C语言规则生成符号
(把C++源代码全部扩在extern C)
6.静态链接和动态链接的区别:
静态链接:链接的是*.lib (*.a) 编译时,生成可执行文件之前链接
动态库: *.dll(*.so) 生成可执行文件之后运行起来时链接的(动态链接减少可执行文件的大小,但比静态链接慢)
六、const 变成不能被修改的量
1、C语言的const: (1)const修饰的变量不是必须初始化的,但之后再也无法给其合法的值。
(2)const修饰的量叫常变量,不是常量。
(3)const修饰的常变量和普通变量唯一区别是,常变量定义以后,不能作为左值存在。
(4)常变量和普通变量的编译方式一模一样。
2、C++的const: (1)const修饰的量必须初始化。
(2)const修饰的量为常量。
(3)const的编译规则:所有使用常量名字的地方(使用常量值的地方)全部替换成常量的初始值。???
(4)当const常量引用一个编译阶段不明确的值的时候,const常量会退化成常变量。??? (3)和(4)矛盾??
(5)const修饰的值的符号属性是local的,只有当前文件可见。???
在const常量定义处加extern,符号属性就改为了global,即外部文件就可访问该常量了。???
七、引用
(int)&a:把a的地址强制转换为十进制整型
(int &)a:把a的引用强制转为整型。
1、定义一个引用变量是否开辟内存? (开辟四个字节存储地址,但是访问不到系统给引用开辟的那四个字节的内存,只能访问到引用变量所引用的内存。系统会自动解引用)
2、定义一个引用变量,引用数组名
int (*q)[10]=&array <=======> int (&q)[10]= array
【注意】
1.引用变量必须初始化
2.初始化的值必须能取地址
3.引用一经定义不能改变,不能再引用别的变量
4.访问引用变量,永远访问的是它所引用的内存,不能访问存储地址的那四个字节的内存。
- c和cpp比较(1)--读书笔记3
- c和cpp比较(2)--读书笔记4
- c cpp字符串比较
- Effective cpp 读书笔记3
- Effective cpp 读书笔记1
- 读书笔记之c和指针(3)
- QT笔记1(.c和.cpp)
- 读书笔记之c和指针(1)
- 读书笔记-C++PrimerPlus-CPP流的总结
- 《c和指针》读书笔记3
- 读书笔记:C和指针3
- 《C和指针》读书笔记(1)
- 《C和指针》读书笔记(1)
- C和指针读书笔记 -1
- 《C和指针》读书笔记1
- <C和指针----读书笔记1>
- 读书笔记:C和指针1
- Mix C Cpp (C和C++混合编程)
- 【leetcode】112. Path Sum(Python & C++)
- Iput子系统探究--1(input_dev)
- Python的from import和import的区别?
- cxf3.14+spring4.2以rest风格发布webservice
- 51nod1305 Pairwise Sum and Divide
- c和cpp比较(1)--读书笔记3
- java单例设计模式
- 达人篇:3)质量管理
- Linux系统中MySQL相关问题
- Android第一行代码
- R语言对高频交易订单流进行建模分析 3
- 数据库存储过程
- angular my97时间控件 指令 封装使用
- 【PAT】【Advanced Level】1074. Reversing Linked List (25)