C++引用型別詳解
一、引用的概念
下面的寫法定義了一個引用,並將其初始化為引用某個變數。
型別名 & 引用名 = 某變數名;
int n = 4;
int & r = n; // r引用了 n, r的型別是 int &
某個變數的引用,等價於這個變數,相當於該變數的一個別名。
- 定義引用時一定要將其初始化成引用某個變數。
- 初始化後,它就一直引用該變數,不會再引用別的變數了。
- 引用只能引用變數,不能引用常量和表示式。
二、常用用法
2.1 用引用來交換倆個變數的值
簡單例項:
void swap( int & a, int & b)
{
int tmp;
tmp = a; a = b; b = tmp;
}
int n1, n2;
swap(n1,n2) ; // n1,n2的值被交換
2.2 引用作為函式的返回值
int n = 4;
int & SetValue() { return n; }
int main()
{
SetValue() = 40;
cout << n;
return 0;
}
上面的程式碼輸出為40。可以看出來函式引用了全域性變數n。
三、常引用
定義引用時,前面加const關鍵字,即為“常引用”。
int n;
const int & r = n;
r 的型別是 const int &
- 不能通過常引用去修改其引用的內容
int n = 100;
const int & r = n;
r = 200; //編譯錯
n = 300; // 沒問題
- const T & 和T & 是不同的型別!!! T & 型別的引用或T型別的變數可以用來初始化 const T & 型別的引用。 const T 型別的常變數和const T & 型別的引用則不能用來初始化T &型別的引用,除非進行強制型別轉換。
相關文章
- 詳解C++引用C++
- C++ 引用型別簡介C++型別
- JavaScript 基本資料型別和引用型別的區別詳解JavaScript資料型別
- C++之string型別詳解C++型別
- 詳解C++中指標(*)、取地址(&)、解引用(*)與引用(&)的區別 (完整程式碼)C++指標
- C++中指標與引用詳解C++指標
- 詳聊Java的四種引用型別Java型別
- 引用型別型別
- 值型別和引用型別型別
- JavaScript引用型別-Object型別JavaScript型別Object
- 值型別與引用型別型別
- C++ 型別轉換詳解 -- const_castC++型別AST
- js引用型別JS型別
- javascript:引用型別JavaScript型別
- JavaScript值型別和引用型別JavaScript型別
- c#:值型別&引用型別C#型別
- ECMAScript 原始型別與引用型別型別
- Swift值型別和引用型別Swift型別
- js基本型別和引用型別區別JS型別
- 值型別與引用型別的區別型別
- JAVA 基本型別與 引用型別區別Java型別
- javascript基本型別 引用型別 基本包裝型別JavaScript型別
- C#的型別——值型別與引用型別C#型別
- JavaScript - 基本型別與引用型別值JavaScript型別
- Java的基本型別和引用型別Java型別
- 圖解C#的值型別,引用型別,棧,堆,ref,out圖解C#型別
- Go 的引用型別Go型別
- Golang 引用型別-mapGolang型別
- 引用型別之Object型別Object
- C#型別詳解C#型別
- Java集合型別詳解Java型別
- 詳解c++指標的指標和指標的引用C++指標
- C++中的指標與引用詳細解讀C++指標
- JS篇-基本型別和引用型別、typeofJS型別
- JS基本型別與引用型別知多少JS型別
- Structs vs classes(值型別vs引用型別)Struct型別
- 【C#之值型別vs引用型別】C#型別
- c#中值型別和引用型別的區別C#型別