歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++的引用

C++的引用

日期:2017/3/1 9:14:48   编辑:Linux編程

C++引用的學習:

通常引用第一個作用,人們會想到的是引用的變量的別名;(可以說是直接操作這個變量);

引用的聲明:

Type + & + name(可以認為是一個常指針)

注意:(1)&是起標識符的作用;

   (2)聲明引用時,必須先將其進行初始化;

   (3)不能建立數組的引用,因為數組是因為由若干個元素組成,所以無法建立一個數組的別名;

引用的應用:

(引用作為參數)

int swap(int &a, int &b)
{

    int t = a;
    a = b; 
    b = t;
} 

(引用作為常數)

int main()
{
  int b = 100;
  const int &a = b;
  return 0;
}

這可以讓代碼的健壯性比較強,並且也有其他方面的需求;

(引用作為返回值)

Type + & + 函數名

(1)以引用返回函數值,定義函數時需要在函數名前加&;

(2)用引用返回一個函數值的最大好處是,在內存中不產生被返回值的副本。

但函數返回棧變量時,不能成為其他引用的初始值;(因為棧變量會因為函數結束後被釋放掉)

int &fun()
{
    return a;    //這樣當局部變量被釋放掉的時候,對局部變量的引用會指向一片不知哪裡的內存空間
}
int main()
{
    int &a = fun();
}
//這是錯誤的

並且不能成為左值;

函數返回靜態變量或全局變量:(這兩種變量都放在全局區)

可以作為其他值的引用,並且可以作為左值和右值;

以以上幾種情況寫一個代碼:

//返回靜態變量
int &fun1()
{
    static int a = 1;
    return a;
}

//返回局部變量
int &fun2()
{
    int a = 2;
    return a;
}

//參數是引用的
int &fun3(int &a)
{
    return a;
}

int main()
{
    int a = fun1();
    int &b = fun1();
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
}
/*運行結果為:
  a = 1;
  b = 1;
*/

這是因為參數是全局的;

main()
{
    int a = fun2();
    int &b  = fun2();
}
/*
   運行結果為2和-2 (負數代表指向內存不明確)
*/

因為這是的引用是局部變量當第2個分號結束時就會指向不明確的內存區;

main()
{
  int c = 10; int a = fun3(c); int &b = fun3(c); } /* 運行結果為 a = 10; b = 10; */

這時的引用是因為內存在程序結束之前不會被釋放掉;

Copyright © Linux教程網 All Rights Reserved