一、c++的引用 reference
1.1 概念:引用是另外一个变量的别名
1.2 值传递 和 引用传递
myswap1(int x, int y);//值传递
myswap2(int *x, int *y);//地址传递,本质上是值传递,传递的是地址值
myswap3(int &x, int &y);//引用传递
1.3 引用的定义
引用必须初始化
类型 &引用名 = 变量名;
引用一旦初始化,则终生为这个变量服务
int &引用名 = 1000;//错误
const int &引用名 = 1000; //正确
1.4 引用的实现
引用是用指针实现的
int i = 100;
const int *pi = &i;
*pi = 200;
1.5 引用的应用
1.5.1函数的返回值如果是引用,则把函数的返回值作为左值
int getmax(int x, int y);
getmax(x, y) = 123; //错误,基本类型返回结果为只读
1 #include <iostream>
2 using namespace std;
3 /*
4 int getmax(int x, int y) {
5 return x > y ? x : y;
6 }
7 */
8 int &getmax(int& x, int& y) {
9 return x > y ? x : y;
10 }
11 int main() {
12 int x = 10, y = 123;
13 int var_res = getmax(x, y);
14 cout << var_res << endl;
15 getmax(x, y) = 456;
16 cout << x << "," << y << endl;
17 //getmax(x, y) = 456;错误,基本类型返回值为只读,不能左值
18
19 }
引用类型作为返回值类型时,引用的变量必须保证在函数调用完成后,生命期依然存在,不能返回局部变量的引用,可以返回堆 全局 静态 成员变量的引用
1.5.2 引用类型作为函数参数
减少数据的拷贝
可以在函数内部修改函数外部的数据
注意 引用类型的参数如果没有const代表不能接收常量和const修饰的变量
如果一个引用类型参数加了const修饰代表不能在函数内部修改数据,可以传常量和const修饰的变量
1.6 引用和指针的联系和区别
二、c++中的类型转换(四种)
1. static_cast<类型>(变量)
在某一方向上,可以做隐式类型转换
2. dynamic_cast<类型>(变量)
动态类型转换,适合具有虚函数的父子类之间的指针或引用
3. const_cast<类型>(变量)
去掉const修饰
const int data = 200;
-------------------------------------------------------------------------
1 #include <iostream>
2 using namespace std;
3 int main() {
4 volatile const int data = 200; //如果没有volatile一遇到const那么就输出原来的内容,例如本例子中,如果没有volatile那么最后输出data的值为200,加了volatile,值为9527
5 int *pdata = const_cast<int *>(&data);
6 *pdata = 9527;
7 cout << data << endl;
8
9 }
4. 重新解释的类型转换,最接近c的强制类型转换
reinterpret_cast<类型>(变量);