C++对C的加强——引用
1、什么是引用?
绑定一个变量,不能再绑定其他的变量;其次定义一个引用一定要给它初始化(绑定一个变量)
2、引用的作用:
给变量起别名,操作这个引用实际上就是操作这个变量。
1)引用作函数形参==指针作函数形参
#include<iostream>
using namespace std;
void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
int main()
{
int a=7;
int b=8;
swap(a,b);
cout<<a<<":"<<b<<endl;
return 0;
}
2)引用作函数的返回值:使函数的调用可以作为左值
不能返回局部变量或者局部变量的地址(因为函数执行结束之后,会释放空间)
3、引用的分类:
左值引用(只能绑定左值)右值引用(只能绑定右值)
—— 如何判断一个左值?
是否可以对该值取地址,或者可以修改
——如何判断一个右值?
不能对该值取地址或者修改该值
——左值引用的作用:作函数形参、函数返回值
——右值引用的作用:作函数形参、函数返回值
——左值引用解决的问题:代替指针的操作
——右值引用解决的问题:临时对象开销的问题(对象移动)
int num=5;
int &l_num=num;//绑定左值
int &&r_num=5;//绑定右值
int &&r_num2=std::move(l_num);//move:将左值l_num转为右值
int &&r_num=5;
r_num++;
//r_num虽说是一个右值引用的名字,但是r_num仍然是一个左值
4、引用的注意事项:
“引用不占用内存空间”——错误的说法
struct node
{
int num;
int &l_num=num;
};
5、指针和引用的区别:
本质、内存空间、级数(指针可分为多级、引用可分为两级)、使用效率(引用效率高,直接访问,而指针间接访问)
6、const 关键字升级:
——const:修饰一个变量(全局、局部)、修饰函数返回值
——作用:将修饰的变量标记为只读变量 (错误:const 修饰的变量是常量)
——注意事项:const修饰一个变量必须初始化;const距离谁近就修饰谁,谁就不能改变
——工程应用:修饰函数的形参,保护实参不在函数执行过程中被修改,也就是说这个函数接口是安全的,可以使用。
在C++中:
——const修饰一个变量,这个变量就是常量,不可以修改
——指针和引用赋值操作必须是const对const;
——constexpr关键字:
C++对C的加强——动态内存分配(new、delete)
1、C语言动态分配问题(malloc用法)
2、C++中 new、delete分配
3、C语言中的typedef用法
4、C++中的using 用法