程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++ 學習筆記之 引用

C++ 學習筆記之 引用

編輯:關於C++

C++ 學習筆記之 引用。本站提示廣大學習愛好者:(C++ 學習筆記之 引用)文章只能為提供參考,不一定能成為您想要的結果。以下是C++ 學習筆記之 引用正文


一.定義:

  引用就是某一變量(目標)的一個別名,對引用的操作與對變量直接操作完全一樣.

二.用法:
      1. 基本用法

        例如: int & a = b;

      2. 引用作為函數返回值

        先看一個例子:

        #include <iostream>
        using namespace std;
        int temp ;
        int & F(){
            temp*=2;
            return temp;
        }
        int  F1(){
            temp*=2;
            return temp;
        }
        int main(){
            temp = 5;
            int &d = F();
            int e = F();
            int f = F();
            cout << &d << " " << &temp << endl;
            cout << &e << " " << &temp << endl;
            cout << &f << " " << &temp << endl;
            cout << d << " " << temp << endl;
            
            return 0;
        }

        程序輸出結果為:

        0x40d020 0x40d020
        0x61ff18 0x40d020
        0x61ff14 0x40d020
        40 40

          從結果中可以看到,當使用引用作為程序返回值並且將這個返回值賦值給引用類型時,他們的地址是相同的(都指向temp這個變量),其他情況都產生了值的賦值,發生了地址的變化。由此也可以看出,使用引用可以減少值的復制,特別是當需要傳的數據特別大的時候。

      3. 常引用 基本用法如下:
        int b = 4;
        const int a = b;

        使用常引用可以是引用的值不可修改。這樣可以防止因誤操作引發的數據修改,保證了安全性。

      4. 引用函數作為左值

        一般非引用函數都是只能作為右值,函數一旦計算完成那麼它就是一個確定的常數。但引用函數不同。它既可作為左值,又可作為右值。

        int &d = ++F();

         

        相當於

        int A[10];
        int &array = A;

         

        這是它作為左值的應用。

        但當我執行

        int &d = F()++;

        這樣會產生錯誤。錯誤信息為:

        error: invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'

        這個錯誤信息與執行

        int &d = 5;

        的錯誤信息一致,說明F()++操作實際上是相當於先把F()的值存到一個整型常量中,然後F()(相當於temp)的值加一.一個整型常量無法復制給int&類型。

        執行

        const int &d = F()++;(使用常引用)

         

        int d = F()++;(把常量值拷貝到變量中)

        才可以正常編譯。

         

三.注意事項:
        • 引用不能用於數組,但可以用在指針上

          如果嘗試執行

          int A[10];
          int &array = A;

           

          編譯器會報錯:
          error: declaration of 'd' as array of references

          但我可以對指針用引用:

          int *p = A;
          int &array = p;

           

          編譯成功。

          至於為什麼不能對數組用引用,網上答案很多,我自己不能確定哪種答案是正確的,大家可以自行搜索相關問題。

        • 不要試圖返回臨時對象的引用,這樣引用會成為無效引用,假如把返回值賦值給變量,那麼程序可能會崩掉
        • 返回函數內部new分配的內存的引用或指針,這樣的寫法不推薦,很容易會造成內存洩漏(即無法正常的回收這塊內存)
        • 注意常引用與普通引用之間的相互賦值問題
          1 temp = 5;
          2 const int t = 6;
          3 int &d = temp;
          4 const int &e = temp;
          5 const int &f = t;
          6 int &g = t;//編譯錯誤

          常量變量都可以賦值給常引用,但只有變量值才可以給普通引用,若常量值給普通引用會發生編譯錯誤。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved