天天看點

引用和const引用(筆記)

1.引用

#include<iostream>
using namespace std;

//引用不是變量
//引用僅僅是變量的别名
//引用沒有自己獨立的空間
//引用要與它鎖引用的變量共享空間
//對引用所做的改變實際上是對它所引用變量的改變
//引用在定義的時候要進行初始化
//引用已經初始化,不能重新指向其它變量
int main(void)
{
	int val = 100;
//	int& refval;	error C2530: “refval”: 必須初始化引用
	int& refval = val;
	refval = 200;
	cout<<"val="<<val<<endl;	//輸出200

	int val2 = 500;
	refval = val2;	//不代表将refval引用至val2這個變量
					//僅僅隻是代表将val2指派給refval
	cout<<"val="<<val<<endl;
}
           

2.const引用

#include<iostream>

using namespace std;

//const引用是指向const對象的引用
int main(void) 
{
	const int val = 1024;
	const int& refval = val;
//	int& ref2 = val;	//Error,“初始化”: 無法從“const int”轉換為“int &”
	
//	refval = 200;		//Error,refval是一個常量
	int val2 = 1024;
	const int& ref3 = val2;	//const 引用指向非const對象

	double val3 = 3.14;
	const int& ref4 = val3;	//會丢失精度 
							//等價于int temp = val3
							//const int& ref4 = temp;
								
	cout<<"ref4="<<ref4<<endl;
	cout<<"val3="<<val3<<endl;

//	int& ref5 = val3;	// error C2440: “初始化”: 無法從“double”轉換為“int &”
	return 0;
}
           

3.引用作為參數傳遞

#include <iostream>
using namespace std;

//引用作為參數傳遞
void swap(int& x, int& y)
{
	int temp = x;
	x =y;
	y = temp;
}
int main(void) 
{
	int a = 5;
	int b = 6;
	swap(a, b);		//在函數調用時,引用被初始化x = a, y = b;

	cout<<"a="<<a<<" b="<<b<<endl;
	return 0;
}
           

4.引用作為函數傳回值

#include <iostream>
using namespace std;

//引用作為函數傳回值
//注意:不能傳回對局部變量的引用
int a[] = {0,1,2,3,4};
int& index(int i)
{
	return a[i];
}
int main(void)
{
	index(3) = 100;	//引用作為函數傳回值,使得函數可以放在指派運算符左邊
					//函數傳回引用,引用在函數傳回的時候初始化
					//index(3)在函數傳回的時候被初始化a[3]
	cout<<"a[3]="<<a[3]<<endl;
	return 0;
}