最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中引用的相關知識點小結

 更新時間:2022年03月02日 12:23:11   作者:Chaser?Feng  
引用是C++一個很重要的特性,顧名思義是某一個變量或對象的別名,對引用的操作與對其所綁定的變量或對象的操作完全等價,這篇文章主要給大家總結介紹了C++中引用的相關知識點,需要的朋友可以參考下

引用的概念

引用不是新定義一個變量,而是給已存在變量取了一個別名,編譯器不會為引用變量開辟內存空間,它和它引用的變量共用同一塊內存空間。

比如:李逵,在家稱為"鐵牛",江湖上人稱"黑旋風"。那么這里的“鐵牛”、“黑旋風”就稱李逵的引用。

在程序中呢,引用的用法如下:

類型& 引用變量名(對象名) = 引用實體;

舉個例子:

void TestRef()
{
	int a = 10;
	int& ra = a;//<====定義引用類型
	printf("%p\n", &a); //打印出a的地址
	printf("%p\n", &ra); //打印出ra的地址
}

結果如下:

其中ra為a的引用,可見 a 和 ra 的地址一樣,這就說明了變量與變量的引用公用的一塊內存空間。

特別注意:引用類型必須和引用實體是同種類型的

引用特性

1. 引用在定義時必須初始化

2. 一個變量可以有多個引用

3. 引用一旦引用一個實體,再不能引用其他實體

例如:

void TestRef()
{
	int a = 10;
	// int& ra; // 該條語句編譯時會出錯,因為沒有初始化
	int& ra = a;
	int& rra = a;
	printf("%p %p %p\n", &a, &ra, &rra);
}

知道引用的特性后,我們就可以簡化在C語言中一些簡單函數(shù)的寫法,如交換兩個數(shù),可直接傳變量的引用為參數(shù)來實現(xiàn),具體如下:

可見當傳入的參數(shù)為變量的引用時,就可以避免在次開辟內存空間,一定程度上提高了代碼運行效率。

常引用

所謂常引用就是在一個變量的引用前加一個關鍵字 const 來使這個引用具有常量的性質。

如下所示:

void TestConstRef()
{
const int a = 10;
//int& ra = a; // 該語句編譯時會出錯,因為a為常量,而ra為變量(由&前面的類型決定,為int變量類型)
const int& ra = a;
// int& b = 10; // 該語句編譯時會出錯,b為常量
const int& b = 10;
double d = 12.34;
//int& rd = d; // 該語句編譯時會出錯,類型不同
const int& rd = d;
}

再例如:

int main()
{
	int i = 10;
	double d = i;
	//double& r=i; //這里編譯器會報錯,具體原因如下圖示
	const double& r = i; //加上const 修飾就會使引用具有常性
    return 0;
}

所以只有在定義引用前加上const 修飾就能使之具有常性。

另外要注意使用const引用時的權限問題,例如:

#include<iostream>
using namespace std;
int main()
{
	// 使用常變量時變成常變量的別名的條件:不變或者縮小常變量的讀寫權限是可以的,
	//放大你常變量讀寫權限不行的
	const int a = 10;
	// int& b = a;  // 不能這樣定義b,這樣會使a的權限變大,編譯器會報錯

	int c = 20;
	const int& d = c; // 可以這樣定義,d變成的c的別名,d不能修改c,相當于把c的權限縮小
                      //其中c是可以改變的,但是d只能讀不能寫
	return 0;
}

如上解釋一下:并不是每個別名(即引用)都跟原名字有一樣的權限,具體要看怎么修飾。

使用場景

1、做參數(shù)

void Swap(int& left, int& right)
{
  int temp = left;
  left = right;
  right = temp;
}

這里提一下引用做參數(shù)的優(yōu)點:

1、 傳引用是為了減少傳值傳參時的拷貝

2、使用const修飾引用時可以保護形參不會被改變

3、const引用做參數(shù)時,即可接收變量,也可以接收常量
 

總的來說,函數(shù)傳參如果想減少拷貝就用引用傳參,如果函數(shù)中不改變這個參數(shù)最好用const 引用傳參

2、做返回值

看如下栗子:

為什么打印出的 ret=7 呢?

這是因為函數(shù)的返回類型為 int& ,所以返回值 c 的類型就是 int&,而 ret 作為接收函數(shù)的返回值的量,也為 int& 型,所以在這里就可以把 ret 看做是 c 的別名,當程序來到 Add(3,4); 這條語句時,返回值 c 就變?yōu)榱?7,所以此時的 ret 的值也就為7。

以上也說明了使用引用做返回值會有一定的風險性。

引用和指針的區(qū)別

最后來總結一下引用與指針的區(qū)別。

在語法概念上引用就是一個別名,沒有獨立空間,和其引用實體共用同一塊空間。在底層實現(xiàn)上實際是有空間的,因為引用是按照指針方式來實現(xiàn)的。

來看這樣一段代碼:

int main()
{
	int a = 10;
	int& ra = a;
	ra = 20;
	int* pa = &a;
	*pa = 20;
	return 0;
}

再查看其匯編代碼,會發(fā)現(xiàn)引用與指針的實現(xiàn)方式是一樣的。

引用與指針的不同點:

1.引用在定義時必須初始化,指針沒有要求

2. 引用在初始化時引用一個實體后,就不能再引用其他實體,而指針可以在任何時候指向任何一個同類型實體

3. 沒有NULL引用,但有NULL指針

4. 在sizeof中含義不同:引用結果為引用類型的大小,但指針始終是地址空間所占字節(jié)個數(shù)(32位平臺下占4個字節(jié))

5. 引用自加即引用的實體增加1,指針自加即指針向后偏移一個類型的大小

6. 有多級指針,但是沒有多級引用

7. 訪問實體方式不同,指針需要顯式解引用,引用編譯器自己處理

8. 引用比指針使用起來相對更安全(因為指針使用不慎就會造成野指針)

總結

到此這篇關于C++中引用的相關知識點的文章就介紹到這了,更多相關C++中引用知識點內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Qt之簡單的異步操作實現(xiàn)方法

    Qt之簡單的異步操作實現(xiàn)方法

    這篇文章主要介紹了Qt之簡單的異步操作實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語言漢諾塔的簡單了解

    C語言漢諾塔的簡單了解

    這篇文章主要給大家介紹了關于C語言漢諾塔的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • C++實現(xiàn)LeetCode(158.用Read4來讀取N個字符之二 - 多次調用)

    C++實現(xiàn)LeetCode(158.用Read4來讀取N個字符之二 - 多次調用)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(158.用Read4來讀取N個字符之二 - 多次調用),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • C++索引越界的解決方法

    C++索引越界的解決方法

    本文主要介紹了C++索引越界的解決方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C++?OpenCV技術實戰(zhàn)之身份證離線識別

    C++?OpenCV技術實戰(zhàn)之身份證離線識別

    OpenCV身份證離線識別技術的主要技術就是通過OpenCV找到身份證號碼區(qū)域,然后通過OCR進行數(shù)字識別該區(qū)域的截圖即可得到身份證號碼。感興趣的可以了解一下
    2021-12-12
  • php調用c++的方法

    php調用c++的方法

    這篇文章主要介紹了php調用c++的方法,需要的朋友可以參考下
    2014-01-01
  • C++中綴表達式轉后綴表達式的方法

    C++中綴表達式轉后綴表達式的方法

    這篇文章主要介紹了C++中綴表達式轉后綴表達式的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • VC6.0代碼自動提示 VC6.0在win7環(huán)境下代碼提示智能化

    VC6.0代碼自動提示 VC6.0在win7環(huán)境下代碼提示智能化

    作為程序猿的你,是否已經喜歡或習慣依賴IDE開發(fā)環(huán)境呢,有了IDE環(huán)境,即使你想不起方法全名,只要知道某個前綴,或哪怕在提示列表中,一一查詢,也可以找到自己想找的方法或屬性
    2013-01-01
  • C++實現(xiàn)靜態(tài)鏈表

    C++實現(xiàn)靜態(tài)鏈表

    這篇文章主要為大家詳細介紹了C++實現(xiàn)靜態(tài)鏈表,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C語言實現(xiàn)一個簡單的掃雷游戲

    C語言實現(xiàn)一個簡單的掃雷游戲

    掃雷是電腦上很經典的游戲,特意去網上玩了一會,幾次調試之后,發(fā)現(xiàn)這個比三子棋要復雜一些,尤其是空白展開算法上和堵截玩家有的一拼,與實際游戲差別較大,不能使用光標,下面來詳解每一步分析
    2021-10-10

最新評論

鄂州市| 开鲁县| 昭通市| 弋阳县| 尉犁县| 甘谷县| 衡东县| 永登县| 通江县| 鹤庆县| 钟祥市| 华亭县| 化德县| 镇安县| 正阳县| 石柱| 浦东新区| 福鼎市| 岱山县| 凭祥市| 延津县| 万全县| 阜康市| 绵竹市| 安远县| 常熟市| 余江县| 长阳| 东阳市| 班戈县| 郧西县| 介休市| 兴城市| 临武县| 金平| 额尔古纳市| 酉阳| 乌拉特前旗| 尼木县| 衡山县| 开原市|