1、什么是引用?
变量名本质:一段连续空间的别名
引用的本质:给已经存在的变量取别名
int num = 100;
//定义的时候 &修饰变量名 表示引用
//系统不会给b 开辟空间 因为b是num的别名 b和num共用同一个空间
//b必须初始化
//int &b;//err
int &b=num;//b为num的别名, b为num的引用
给数组取别名:
int arr[5]={10,20,30,40,50};
//myArray是arr的别名
int (&myArray)[5] = arr;
给指针取别名:
int *p;
int *(&myP) = p;
给函数取别名:
int func(int,int);
int (&myFun)(int,int) = func;
1、引用作为函数的形参,函数内部可通过形参引用修改外部变量的值
2、常引用不能通过形参引用修改外部变量的值。
//需求:给100取个别名
const int &a = 100;
//a就是常引用 不能通过a修改内容
//a = 1000;//err
cout<<"a = "<<a<<endl;
3、指针和引用的区别
1、 指针是一个变量,它存储了一个内存地址;引用是一个别名,是已存在的变量的别名
2、 指针可以通过*来访问和修改指向的内存地址中的值,引用本身不能直接操作内存地址
3、 指针可以为空,引用不能赋予空值
4、 指针可以在声明时不进行初始化,引用必须进行初始化
2、什么是内联函数?
用关键字inline修饰的函数
//内联函数的定义:inline必须在定义函数的时候修饰
inline int myAdd(int x, int y)
{
return x+y;
}
//函数声明时 使用inline无效
inline int myAdd(int x, int y);//无效的
内联函数和宏函数的区别:
1、内联函数的本质是函数,宏函数的本质不是函数
2、宏函数在预处理阶段展开,内联函数在编译阶段展开
3、宏函数不能保证参数的完整性,内联函数能保证参数的完整性
4、宏函数没有作用域的限制,不能作为类的成员,内联函数有作用域,可以作为类的成员
内联函数的特点:
1、inline修饰的内联函数只是用户的建议,具体还得看编译器
2、类的成员默认为内联函数
3、内联函数的限制:
不能存在任何形式的循环语句
不能有过多的条件判断语句
函数体不能过于庞大
不能对函数进行取址操作