04--c++养成之路(bool类型,内联,重载,缺省参数和哑元,引用,动态内存分配)

布尔类型:

  • 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

小主人,加油哒······································

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码字界陈冠希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值