布尔类型:
- true表示真,本质是单字节整数1.
- false表示假,本质是单字节整数0.
- 任何基本类型都可以隐式转换为bool类型
- 非0即真,0即假。
内联:
- 用函数已被编译好的二进制代码,替换对该函数的调用指令。提高效率,避免函数调用开销。
- 使用inline关键字期望该函数被优化为内联,是否内联由编译器决定。
- 内联会使可执行文件内存变大,只有频繁调用的简单函数适合内联。复杂函数和递归函数都不适合内联。
重载:
- 同一作用域,函数名相同,参数列表不同的函数
- 不同作用域同名函数遵循就近隐藏原则。
- 重载和返回类型无关
参数表不同:
- 类型不一样
- 数目不一样
- 顺序不一样
缺省参数和哑元:
为函数指定缺省值,调用时若未指定实参,则对应的形参取缺省值。
最好在函数声明中指定。可以利用声明改缺省值。
禁止在声明和定义同时指定缺省参数。可能不一致,编译器禁止
缺省参数只能在最后,即你某个参数指定为缺省参数,后面所有参数都要有缺省值
不要因为是用缺省参数导致重载歧义
只指定类型而不指定名称的函数参数,叫做哑元。
为什么使用哑元?
1.兼容之前版本。2.形成函数重载
引用:
- 引用就是变量别名,对引用操作和对变量操作完全一样。
- 引用必须初始化但不能为空。
- 引用不能更换目标
- 引用不额外占用内存
引用做参数的特点:
节省空间+提高效率
值传递,形参生成局部临时变量接收实参的值。
引用传递,形参是实参的别名
指针传递,传入实参的地址,指针通过地址访问修改值
引用做函数返回值特点:
函数可以放在赋值语句的左边
动态内存分配:
继续使用标准C malloc/calloc/realloc/free
关键字 new delete
在分配内存的同时初始化
数组方式new的需要以数组方式delete
在C11标准中可以初始化数据
以上内容学习代码参考:
#include<iostream> using namespace std; #if 0 inline int max(int a,int b){//内联 return a > b ? a : b; } int main(){ bool a = true;//布尔类型 cout << a << endl; a = 0; cout << a << endl; a = "a"; cout << a << endl; int Max1=max(2,3); cout << Max1 << endl; int Max2 = max(5,2); cout << Max2 << endl; return 0; } #endif #if 1 void foo(){//重载 cout<<"fool()"<<endl; } void foo(int a,double b){ cout<<"foo(int a,double b)"<<endl; } void foo(double a,int b){ cout<<"foo(double a,int b)"<<endl; } void foo(int a){ cout<<"foo(int a)"<<endl; } void koo(int a,int b=2,char c='c'){//缺省 } void koo(int,int b,char){//哑元 } int main(){ return 0; } #endif #if 0 #endif #if 0//引用 int foola(int a){ return ++a; } int foolb(int& a){//引用做参数,形参是实参别名。 return ++a; } int& foolc(int& a){ return ++a; } int main(){ int danny = 38; int& a = danny; int& b = a; b = 40; cout << danny << endl; cout << &danny << endl << &a << endl << &b << endl; int c = 18; b = c;//给引用赋值 cout << &b << endl << &c << endl; foola(b); cout << danny << endl; foolb(b); cout << danny << endl; foolc(b) = 20; cout << danny << endl; return 0; } #endif #if 0 int main(){//动态内存分配 int* p1 = (int*)malloc(sizeof(int)); *p1 = 123; free(p1); p1 = NULL; free(p1); int* p2 = new int; cout << *p2 << endl; *p2 = 123; cout << *p2 << endl; delete p2; p2 = NULL; delete p2; //内存分配的时候初始化 int* p3 = new int(20); cout << *p3 << endl; delete p3; p3 = NULL; delete p3; //动态内存分配数组 int* p4 = new int[4]; for (int i = 0; i < 4;i++){ p4[i] = i; cout << p4[i] << ","; } cout << endl; delete[] p4; p4 = NULL; int* p5 = new int[4]{1,3,5,7}; for (int i = 0; i < 4; i++){ cout << p5[i] << ","; } cout << p5[5] << "," << p5[100] << endl; cout << endl; delete[] p5; p5 = NULL; getchar(); } #endif
小主人,加油哒······································