20170518

一、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<类型>(变量);
  

原文地址:https://www.cnblogs.com/dongjian16/p/6873972.html