目录
缺省参数:
缺省参数在C++中也是比较重要的一部分,它的主要使用场景是在函数中给参数默认值
缺省参数使用时需要注意的点有以下几点:
(1)缺省参数的使用:
//全缺省
int add(int x = 0, int y=5)
{
return x + y;
}
int main()
{
cout << add(1,2) << endl;//传两个参数
cout << add(1) << endl;//传单个参数
cout << add() << endl;//不传参数
return 0;
}
结果:第一个传了两个参数分别对应x和y,所以会输出3;第二个传一个参数对应x,y使用缺省值5,输出6;第三个不传参数全部使用缺省值,输出5
(2)半缺省参数的使用
//全缺省
int add(int x, int y=5)
{
return x + y;
}
int main()
{
cout << add(1,2) << endl;//传两个参数
cout << add(1) << endl;//传单个参数
return 0;
}
结果:半缺省必须传值,x没有缺省值;传参第一个值将对应x,y如有指定实参则不再使用缺省值
函数重载:
C++支持在同一作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同。这样C++函数调用就表现出了多态行为,使用更灵活。而C语言是不支持同⼀作用域中出现同名函数的。
注意:
1.函数重载返回类型可以一致
2.使用缺省参数并不能解决函数参数类型相同的问题
//参数类型不同
int add(int x, int y)
{
return x + y;
}
int add(int x, double y)
{
return x + y;
}
//参数顺序不同
int add(double x, int y)
{
return x + y;
}
//函数参数个数不同
void fc()
{
cout << "fc()" << endl;
}
void fc(int a)
{
cout << "fc(int a)" << endl;
}
引用:
引用的概念和定义:
引用在C++中有着十分重要的地位,引用在使用的方式上和指针有一定相似性,但是引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间, 它和它引用的变量共用同一块内存空间
使用方式:类型& 引用别名 = 引用对象;
同时C++中为了避免引入太多的运算符,会复用C语言的一些符号,比如前面的<< 和 >>,这里的引用也和取地址使用了同⼀个符号&,大家注意使用方法角度区分就可以了
注意:
1.引用必须初始化
2.一个变量可以有多个引用
3.引用了一个实体后,引用就不能再引用其他实体
4.对一个引用再引用实际用途不大,他们都指向同一块空间,不论使用哪个引用修改都会修改那块空间的值
int main()
{
int a = 3;
int& ra = a;
int& raa = ra;
cout << a << endl;
cout << ra << endl;
cout << raa << endl;
cout << &a << endl;
cout << &ra << endl;
cout << &raa << endl;
raa = 4;
cout << a << endl;
cout << ra << endl;
cout << raa << endl;
return 0;
}
(1)引用常见的用途
1.引用在实践中主要是于引用传参和引用做返回值中减少拷贝提高效率和改变引用对象时同时改变被引用对象
2.引用传参和指针传参效果类似,但引用更方便(引用不需要像指针解引用后才可以修改值)
3.使用引用作为返回值比较复杂,它会涉及到后面的类与对象的内容,所以这里先跳过
4.引用和指针在C++中起到相辅相成的效果,他们虽然功能相似,但是各自仍然有特点,所以不要觉得指针没有用了
(2)const引用(常引用)
1.对一个具有常量性质的对象进行引用必须添加const,const引用也可以引用普通对象,因为对象的访问权限在引用过程中可以缩小,但是不能放大
权限放大:比如原本不可以修改的对象,在某些特殊的情况下变成可以修改的情况这就是权限放大
权限缩小:最简单的例子,一个变量被修饰const后变成具有常性的对象,它不能被修改了
2.编译器需要一个空间暂存表达式的求值结果时临时创建的一个未命名的对象, C++中把这个未命名对象叫做临时对象,且C++规定临时空间具有常性
int main()
{
int a = 3;
const int& ra = a*2;//表达式
double d = 1.2;
const int& rd = d;//隐式类型转换
cout << ra << endl;
cout << rd << endl;
return 0;
}
在上面的场景下需要使用const修饰引用,因为a*2的结果时保存在一个临时空间中;int& rd = d则是触发了隐式类型转换产生临时空间,临时空间保存转换后的值,而C++规定临时空间具有常量性质,如果不加const修饰引用会触发权限放大,而这是不允许的,所以想对具有常量性质的对象必须使用常引用进行引用
引用总结:
1.在语法层面上来说,对一个变量取别名不会开空间,而指针则需要在栈上开4(8)字节空间储存地址
2.引用是必须初始化,而指针则是建议初始化
3.指针在没有使用const修饰的情况下可以修改指向对象,而引用不行
4.引用不需要解引用就可以访问指向对象,指针需要解引用
5.sizeof中含义不同,引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占4个字节,64位下是8byte)
6.指针很容易出现空指针和野指针的问题,引用很少出现,引用使用起来相对更安全一些
本篇文章的内容就到这里,希望这篇文章对你有用,感谢你的阅读