將左值參照用於一級指標時,有以下幾種用法:
//方式一:參照一級指標,常規用法
int a = 5;
int * pa = &a;
int * &rpa = pa;
//方式二:參照指向常數的一級指標,以下幾種為等效表示
int a = 5;
const int * pa = &a;
const int * &rpac = pa; //方式一
int const * &rpac = pa; //方式二
//方式三:參照一級指標的常參照,參照自身為常數
int a = 5;
int * pa = &a;
int * const &crpa = pa;
//方式四:參照指向常數的一級指標,且參照自身為常數,以下幾種為等效表示
int a = 5;
int * pa = &a;
const int * const &crpac = pa; //方式一
int const * const &crpac = pa; //方式二
在 Microsoft Visual Studio 中連續多個 const
會被編譯器解釋成一個,即 const const const const int *&
與 const int *&
等效,除此之外,const int const *&
在 Microsoft Visual Studio 中也與 const int *&
等效,而 int *& const
在 QT minGW 中將會報錯,在 Microsoft Visual Studio 中與 int *&
等效。
各型別參照可修改屬性如下表所示:
參照型別 | 修改 *rp |
修改 rp |
---|---|---|
int * &rp |
可以 | 可以 |
const int * &rp |
不可以 | 可以 |
int * const &rp |
可以 | 不可以 |
const int * const &rp |
不可以 | 不可以 |
若將變數的地址賦予參照(例如 rp=&x
),各型別參照可接受的變數地址如下表所示:
參照型別 | int 變數地址 |
const int 變數地址 |
---|---|---|
int * &rp |
不可以 | 不可以 |
const int * &rp |
不可以 | 不可以 |
int * const &rp |
宣告時可以(將建立臨時變數) | 不可以 |
const int * const &rp |
宣告時可以(將建立臨時變數) | 宣告時可以(將建立臨時變數) |
若將一級指標變數賦予參照(例如 rp=p
),各型別參照可接受的一級指標變數如下表所示。若賦值時等號右邊是函數返回的臨時指標變數(屬於右值),則只有當等號左邊為 int * const &
以及 const int * const &
型別時不會報錯,此時必會建立臨時變數(與 const
左值參照性質一致)。
參照型別 | int * 變數 |
const int * 變數 |
int * const 變數 |
const int * const 變數 |
---|---|---|---|---|
int * &rp |
可以 | 不可以 | 不可以 | 不可以 |
const int * &rp |
不可以 | 可以 | 不可以 | 不可以 |
int * const &rp |
宣告時可以 | 不可以 | 宣告時可以 | 不可以 |
const int * const &rp |
宣告時可以(將建立臨時變數) | 宣告時可以 | 宣告時可以(將建立臨時變數) | 宣告時可以 |
若將參照變數賦予參照(例如 rp=rp2
),各型別參照可接受的參照變數如下表所示。比較上下兩表可知,左值參照型別變數被初始化完畢後,若要將其賦值給另一參照變數,賦值時的表現與所參照型別的變數相一致。
參照型別 | int *& 變數 |
const int *& 變數 |
int * const& 變數 |
const int * const& 變數 |
---|---|---|---|---|
int * &rp |
可以 | 不可以 | 不可以 | 不可以 |
const int * &rp |
不可以 | 可以 | 不可以 | 不可以 |
int * const &rp |
宣告時可以 | 不可以 | 宣告時可以 | 不可以 |
const int * const &rp |
宣告時可以(將建立臨時變數) | 宣告時可以 | 宣告時可以(將建立臨時變數) | 宣告時可以 |
本文作者:木三百川
本文連結:https://www.cnblogs.com/young520/p/16714145.html
版權宣告:本文系博主原創文章,著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請附上出處連結。遵循 署名-非商業性使用-相同方式共用 4.0 國際版 (CC BY-NC-SA 4.0) 版權協定。