C++ —— C++引用
C++引用
?
一、普通引用
【變量名】
變量名實(shí)質(zhì)上是一段連續(xù)存儲(chǔ)空間的別名,是一個(gè)標(biāo)號(hào)
程序中通過變量來申請(qǐng)并命名內(nèi)存空間
通過變量的名字可以使用存儲(chǔ)空間
問題1:對(duì)一段連續(xù)的內(nèi)存空間只能取一個(gè)別名嗎?【不是】
1、引用是C++的概念
// 問題:C中可以編譯通過嗎?
int main(void) {int a = 0;int &b= a; //int * const b = &ab=11;//*b = 11;return 0; }// ?gcc編譯結(jié)果?
// 錯(cuò)誤: expected identifier or ‘(’ before ‘&’token
//‘b’未聲明(在此函數(shù)內(nèi)第一次使用)
// 結(jié)論:請(qǐng)不要用C的語法考慮 b=11
?
2、引用概念
(1)在C++中新增加了引用的概念
(2)引用可以看作一個(gè)已定義變量的別名
(3)引用的語法:Type& name = var;
(4)引用做函數(shù)參數(shù)?(引用作為函數(shù)參數(shù)聲明時(shí)不進(jìn)行初始化)
int main(void) {int a = 1;int &b = a;//b是a的別名,請(qǐng)問c++編譯器后面做了什么工作?b = 5;cout<< "b--->"<< a << endl; return 0; }【普通引用在聲明時(shí)必須用其它的變量進(jìn)行初始化】
3、引用的意義
(1)引用作為其它變量的別名而存在,因此在一些場(chǎng)合可以代替指針
(2)引用相對(duì)于指針來說具有更好的可讀性和實(shí)用性
void swap(int &a, int &b) {int t = a;a = b;b = t; }void swap(int*a, int *b) {int t = *a;*a = *b;*b = t; }4、普通引用有自己的空間嗎?
#include <stdio.h>struct stu {int &a;int &b; };int main(void) {printf("sizeof(stu) =%d\n", sizeof(stu));return 0; } // 8【引用是一個(gè)有地址,引用是常量(char *const p)】
5、引用的本質(zhì)
(1)引用在C++中的內(nèi)部實(shí)現(xiàn)是一個(gè)常指針
? ? ? ? ?Type&name ?èType*const name
(2)C++編譯器在編譯過程中使用常指針作為引用的內(nèi)部實(shí)現(xiàn),因此引用所占用的空間大小與指針相同。
(3)從使用的角度,引用會(huì)讓人誤會(huì)其只是一個(gè)別名,沒有自己的存儲(chǔ)空間。這是C++為了實(shí)用性而做出的細(xì)節(jié)隱藏
6、引用注意點(diǎn)
(1)當(dāng)函數(shù)返回值為引用時(shí)
? ? ? ? ? 若返回棧變量
? ? ? ? ?不能成為其它引用的初始值
? ? ? ? ?不能作為左值使用
(2)若返回靜態(tài)變量或全局變量
? ? ? ? ?可以成為其他引用的初始值
? ? ? ? ?即可作為右值使用,也可作為左值使用?
【當(dāng)實(shí)參傳給形參引用的時(shí)候,只不過是c++編譯器幫我們程序員手工取了一個(gè)實(shí)參地址,傳給了形參引用(常量指針)】
?
二、常引用
1、const引用(使用變量初始化)
【const在C中是只讀變量,在C++中是常量】
const Type& name = var;【const引用讓變量擁有只讀屬性】
#include <iostream> using namespace std;int main(void) {int a = 2;const int &b = a;b= 3;cout<< a << b << &a << &b << endl;return 0; }// 錯(cuò)誤:向只讀形參‘b’賦值
2、const引用(使用字符常量初始化)
(1)用變量對(duì)const引用初始化,const引用分配內(nèi)存空間了嗎?
(2)用常量對(duì)const引用初始化,const引用分配內(nèi)存空間了嗎?
#include <iostream> using namespace std;int main(void) {const int &a = 10;int *p = (int *)&a;*p = 12;cout << a<< endl;return 0; }//當(dāng)使用常量(字面量)對(duì)const引用進(jìn)行初始化時(shí),C++編譯器會(huì)為常量值分配空間,并將//引用名作為這段空間的別名
//使用常量對(duì)const引用初始化后將生成一個(gè)只讀變量
?
const&相當(dāng)于const int ?*const a;
普通引用相當(dāng)于int *const a;
三、引用與指針有什么區(qū)別
(1) 引用必須被初始化,指針不必。
(2) 引用初始化以后不能被改變,指針可以改變所指的對(duì)象。
(3) 不存在指向空值的引用,但是存在指向空值的指針。
總結(jié)
以上是生活随笔為你收集整理的C++ —— C++引用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PUN☀️四、服务器大厅建房解析
- 下一篇: C++模拟鼠标移动