詳解C++引用

ramsey 發表於 2021-07-04
C++

什麼是C++引用

c++引用是一個已存在變數的別名。

c++引用的意義

1.在某些場合c++引用可以替代指標。
2.相對指標來說,引用能提高程式碼可讀性。
示例1 引用作為函式引數:

//兩數交換,利用指標
void swap1(int *a,int *b)
{
  int temp = *a;
  *a = *b;
  *b = temp;
}
//兩數交換,利用引用(引用作為引數)
void swap2(int &a,int &b)
{
  int temp = a;
  a = b;
  b =temp;
}
int main() {
  int c =10;
  int d = 100;
  swap1(&c,&d);
  cout<<c<<","<<d<<endl;
  swap2(c,d);
  cout<<c<<","<<d<<endl;
  return 0;
}

輸出結果

100,10
10,100

示例2 引用作為函式返回值:

#include <iostream>
using namespace std;

int nums[5] = {1,2,3,4,5};

//利用引用作為函式返回值
int& SetNum1(int i)
{
  int &temp = nums[i];
  return temp;
}

//利用指標作為函式返回值
int* SetNum2(int i)
{
  int *temp = &nums[i];
  return temp;
}

int main() {
  SetNum1(1) = 10*1;
  SetNum1(4) = 10*4;
  for (int i =0 ; i<5; i++)
   cout<<nums[i]<<endl;
  *SetNum2(1) = 100 *1;
  *SetNum2(4) = 100 *4;
  for (int i =0 ; i<5; i++)
    cout<<nums[i]<<endl;
}

輸出:

1
10
3
4
40
1
100
3
4
400

以上示例可以看出,實現同樣功能,從可讀性來說,明顯引用更勝一籌。

引用佔用記憶體空間嗎

#include <iostream>
using namespace std;

int main() {
 int a=10;
 int& b=a;
 cout<<"引用b佔用的記憶體空間為:"<< sizeof(b)<<endl;
 char c = 'a';
 char &d = c;
 cout<<"引用c佔用的記憶體空間為:"<< sizeof(c)<<endl;
 return 0;
}

輸出:

引用b佔用的記憶體空間為:4
引用c佔用的記憶體空間為:1

引用的本質

C++引用本質其實是一個指標常量(這就不難解釋為什麼int型引用會佔用4個位元組的記憶體空間,char 型引用佔用一個位元組。因為int指標佔用四個位元組記憶體,char型指標佔用一個位元組)。

注意事項

當函式返回引用時:
1.若返回棧變數,函式返回不能當作其他引用的初始值,不能當左值。(因為函式呼叫結束後,函式內的區域性變數被銷燬,函式返回的引用(指標常量)會成為“無所指”的引用(指標)。
2.若返回靜態變數或者全域性變數,函式返回可以做其他引用的初始值,而且既能當做左值,也能當右值。(因為靜態變數或者全域性變數,程式執行期一直存在,從程式開始到程式結束)。

本作品採用《CC 協議》,轉載必須註明作者和本文連結