目录
引用(reference)
就是一片空间的名字
本质上是一种特殊的指针
引用的本质
<type>*const p;//内容可以改变,指向不能改变
作用
函数传参,直接用引用类型,表示实参的空间
定义(左值引用 )
<存储类型><数据类型>&引用名;
int a = 10;
int &r = a;(r,a等价)
定义(右值引用 )
引用一个临时变量
<存储类型><数据类型>&&引用名;
int a = 10;
int &&n = a;
//把a丢到r这个空间里面调用r相当于调用a和正常使用变量名一样
特点
1、引用必须初始化(不存在NULL)
2、引用在初始化后,不能引用其他空间
3、一个变量可以用多个引用
4、引用不可以引用地址
引用的两种使用方法
一、引用作为函数参数
二、引用作为函数返回值可以在函数外部访问static 变量
函数可以作为左值使用
代码示例
eg
#include <iostream>
using namespace std;
void swap (int &a, int &b)
{
a ^= b;
b ^= a;
a ^= b;
}
int main()
{
int a = 100;
int b = 1;
cout << "交换前:" << "a=" << a << ' ' << "b=" << b <<endl;
swap(a,b);
cout << "交换后:" << "a=" << a << ' ' << "b=" << b <<endl;
return 0;
}
ie
返回值也是引用类型的用法
eg
#include <iostream>
using namespace std;
int &left_add(int a)
{
static int n = a + 1;
return n;
}
int main()
{
int &aa = left_add(10) += 100;
cout << aa << endl;
return 0;
}
ie
内联函数(inline)
就是一个特殊的函数
类似于宏函数
直接在函数调用的位置,把函数的代码替换进来
作用
空间换时间
定义
<inline><数据类型><函数名>(函数参数)
inline void fun()
{
}
特点
1、相当于向计算机申请
2、代码很少,一般为5个语句以下
3、多次调用
4、声明和定义写在一起
与宏函数的区别
共同点:都是代码拷贝
1、内嵌函数需要申请
2、内嵌函数本质上是函数,有错误检查,宏函数是原样替换
函数默认参数
定义
<数据类型><函数名>(参数<默认值>)
int creat_hero(int hp=100, int mp=100)
{
}
在函数声明/实现的时候给形参默认值
如果调用时没传参,就使用默认值,如果传参,就使用调用值。
特点
1、默认参数必须往前赋值
2、在声明和实现的地方只有一个能写默认参数
3、引用参数,不能有默认值,可以有默认变量
代码示例
eg
#include <iostream>
using namespace std;
int creat_hero(int hp=100, int mp=100)
{
cout << "英雄的血量:" << hp << " " << "英雄的蓝量:" << mp << endl;
}
int main()
{
creat_hero();
return 0;
}
ie
参数默认值的另一种情况
eg
int creat_hero(int hp, int mp=100)
{
cout << "英雄的血量:" << hp << " " << "英雄的蓝量:" << mp << endl;
}
int main()
{
creat_hero(600);
return 0;
}
ie
//注意:再给默认参数赋默认值的时候必须从后往前赋值
函数重载
特点
1、函数名相同
2、参数必须不同(数量,类型),得让计算机区分的出来
3、在同一个的名字空间下
//计算机在编译时确定函数参数的地址
代码示例
eg
#include <iostream>
using namespace std;
void swap (int &a, int &b)
{
a ^= b;
b ^= a;
a ^= b;
}
void swap (char &a, char &b)
{
a ^= b;
b ^= a;
a ^= b;
}
int main()
{
int a = 100;
int b = 1;
cout << "交换前:" << "a=" << a << ' ' << "b=" << b <<endl;
swap(a,b);
cout << "交换后:" << "a=" << a << ' ' << "b=" << b <<endl;
cout <<endl;
char c = 'a';
char d = 'b';
cout << "交换前:" << "c=" << c << ' ' << "d=" << d <<endl;
swap(a,b);
cout << "交换后:" << "c=" << c << ' ' << "d=" << d <<endl;
return 0;
}
ie