中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是C++引用

發布時間:2021-11-01 11:45:29 來源:億速云 閱讀:149 作者:iii 欄目:開發技術

這篇文章主要介紹“什么是C++引用”,在日常操作中,相信很多人在什么是C++引用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”什么是C++引用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    一、C++ 引用

    變量名,本身是一段內存的引用,即別名(alias)。此處引入的引用,是為己有變量起一個別名。

    聲明如下

    int main()
    {
    	int a;
    	int &b = a;
    }

    1.規則

    1.引用沒有定義,是一種關系型聲明。聲明它和原有某一變量的關系。類型與原有類型保持一致,且不分配內存。與被引用的變量有相同的地址。

    2.聲明的時候必須初始化,一經聲明,不可變更。

    3.可對引用,再次引用。多次引用的結果,是某一個變量具有多個別名。

    4.&符號前面有數據類型時,是引用。其他均為取地址。

    #include <iostream>
    using namespace std;
    int main()
    {
    	int a,b;
    	int &r = a;
    	int &r = b; //錯誤,不可更改原有的引用關系
    	float &rr = b; //錯誤,引用類型不匹配
    	cout<<&a<<&r<<endl; //變量與引用具有相同的地址。
    	int &ra = r; //可對引用更次引用,表示 a 變量有兩個別名,分別是 r 和 ra
    }

    什么是C++引用

    2.應用

    1.值作函數參數

    void swap(int a, int b); //無法實現兩數據的交換
    void swap(int *p, int *q); //開辟了兩個指針空間實現交換

    2.引用作函數參數

    #include <iostream>
    using namespace std;
    void swap(int &a, int &b){
    	int tmp;
    	tmp = a;
    	a = b;
    	b = tmp;
    }
    int main(){
    	int a = 3,b = 5;
    	cout<<"a = "<<a<<"b = "<<b<<endl;
    	swap(a,b);
    	cout<<"a = "<<a<<"b = "<<b<<endl;
    	return 0;
    }

    什么是C++引用

    c++中引入引用后,可以用引用解決的問題。避免用指針來解決。

    3.引用提高

    引用的本質是指針,C++對裸露的內存地址(指針)作了一次包裝。又取得指針的優良特性。所以再對引用取地址,建立引用的指針沒有意義

    1.可以定義指針的引用,但不能定義引用的引用。
    int a;
    int* p = &a;
    int*& rp = p; // ok
    int& r = a;
    int&& rr = r;//error

    例子:

    #include <iostream>
    using namespace std;
    void swap(char *pa,char *pb)
    {
    	char *t;
    	t=pa;
    	pa=pb;
    	pb=t;
    }
    void swap2(char **pa,char **pb)
    {
    	char *t;
    	t=*pa;
    	*pa=*pb;
    	*pb=t;
    }
    void swap3(char *&pa,char *&pb)//指針的引用
    {
    	char *t;
    	t=pa;
    	pa=pb;
    	pb=t;
    }
    int main()
    {
    	char *pa="china";
    	char *pb="america";
    	cout<<"pa"<<pa<<endl;
    	cout<<"pb"<<pb<<endl;
    	//swap(pa,pb);
    	//swap2(&pa,&pb);
    	swap3(pa,pb);
    	cout<<"pa"<<pa<<endl;
    	cout<<"pb"<<pb<<endl;
    	return 0;
    }

    什么是C++引用

    2.可以定義指針的指針,不能定義引用的指針。
    int a;
    int* p = &a;
    int** pp = &p; // ok
    int& r = a;
    int&* pr = &r; // error
    3.可以定義指針數組,但不能定義引用數組,可以定義數組引用。
    int a, b, c;
    int* parr[] = {&a, &b, &c}; // ok
    int& rarr[] = {a, b, c}; // error
    int arr[] = {1, 2, 3};
    int (&rarr)[3] = arr; // ok
    4.常引用

    const 引用有較多使用。它可以防止對象的值被隨意修改。因而具有一些特性。

    (1)const 對象的引用必須是 const 的,將普通引用綁定到 const 對象是不合法的。

    這個原因比較簡單。既然對象是 const 的,表示不能被修改,引用當然也不能修改,必須使用 const 引用。實際上,const int a=1; int &b=a;這種寫法是不合法的,編譯不過。

    (2)const 引用可使用相關類型的對象(常量,非同類型的變量或表達式)初始化。

    這個是const 引用與普通引用最大的區別。const int &a=2;是合法的。double x=3.14; const int&b=x;也是合法的。

    4.常引用原理

    const 引用的目的是,禁止通過修改引用值來改變被引用的對象。const 引用的初始化特性較為微妙,可通過如下代碼說明

    double val = 3.14;
    const int &ref = val; // int const & int & const ??
    double & ref2 = val;
    cout<<ref<<" "<<ref2<<endl;
    val = 4.14;
    cout<<ref<<" "<<ref2<<endl;

    上述輸出結果為 3 3.14 和 3 4.14。因為 ref 是 const 的,在初始化的過程中已經給定值,不允許修改。而被引用的對象是 val,是非 const 的,所以 val 的修改并未影響 ref 的值,而 ref2 的值發生了相應的改變。

    那么,為什么非 const 的引用不能使用相關類型初始化呢?實際上,const 引用使用相關類型對象初始化時發生了如下過程:

    int temp = val;
    const int &ref = temp;

    如果 ref 不是 const 的,那么改變 ref 值,修改的是 temp,而不是 val。期望對 ref 的賦值會修改 val 的程序員會發現 val 實際并未修改。

    int i=5;
    const int & ref = i+5;
    //此時產生了與表達式等值的無名的臨時變量,
    //此時的引用是對無名的臨時變量的引用。故不能更改。
    cout<<ref<<endl;

    5.const的好處

    1,使用 const 可以避免無意修改數據的編程錯誤。

    2,使用 const 可以處理 const 和非 const 實參。否則將只能接受非 const 數據。

    3,使用 const 引用,可使函數能夠正確的生成并使用臨時變量(如果實參與引用參數不匹配,就會生成臨時變量)

    6.引用的本質淺析

    1.大小與不可再引用

    struct TypeP
    {
    	char *p;
    };
    struct TypeC
    {
    	char c;
    };
    struct TypeR
    {
    	char& r; //把引用單列出來,不與具體的對象發生關系
    };
    int main()
    {
    	printf("%d %d %d\n",sizeof(TypeP),sizeof(TypeC),sizeof(TypeR));
    	return 0;
    }

    什么是C++引用

    結論:引用的本質是,是對常指針 type * const p 的再次包裝。

    1、const int *pi                                   指向常量的指針。
    2、int * const pi                                  指針本身是一個常量,稱為“指針常量”、“常指針”。
    3、const int * const pi                       指向常量的指針常量。

    到此,關于“什么是C++引用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    c++
    AI

    开封市| 东阳市| 肇州县| 宁津县| 河东区| 潞西市| 武宣县| 泰顺县| 突泉县| 洛宁县| 盐源县| 科技| 宣城市| 沂南县| 巧家县| 太白县| 沈阳市| 二连浩特市| 民和| 华坪县| 卓尼县| 吐鲁番市| 巨鹿县| 玛纳斯县| 裕民县| 米脂县| 绿春县| 谢通门县| 清水县| 伊川县| 轮台县| 连州市| 藁城市| 东乡县| 潞城市| 巴南区| 西贡区| 福建省| 瑞昌市| 醴陵市| 兴文县|