形參(const,引用,指針)

#include <iostream>         //這是一個關於引用形參,const形參,指針形參的程序,用於理解不一樣形式的區別
using namespace std;


//非引用形參,實參副本,修改形參值不影響實參
//const常量,值不可修改
//非引用非const形參和非引用const形參都可由const或非const實參初始化
int use_ptr1(int val)		        //非引用非const形參
{  
 return ++val;			        //能夠修改
}
int use_ptr2(const int val)	        //非引用const形參
{
 return val;				//不可修改
}
//指針形參
int use_ptr3(int *s1)			//指針形參指向非const對象
{					//只能由指向非const對象的實參指針初始化
 return ++(*s1);			//能夠修改
}
int use_ptr4(const int *s2)	        //指針形參指向const對象
{					//能夠由指向const和非const對象的實參指針初始化
 return *s2;				//不可修改
}




/*********************************/
//引用形參,直接關聯到綁定對象,對形參的修改就是對實參的修改
int use_ptr5(int &val)				//非const引用形參
{						//只能與徹底同類型的非const對象關聯
 return ++val;					//不容許傳遞右值或須要類型轉換的對象
}
int use_ptr6(const int &val)		        //const引用形參
{						//能夠由非const或const對象初始化
 return val;					//也能夠傳遞右值或須要類型轉換的對象
}


//傳遞指針的引用


void ptrswap1(int *&s1,int *&s2)		//指向非const對象的指針的引用
//形參定義的理解:int *&a->a是一個引用,與指向int型對象的指針相關聯。也就是說,a是傳遞進函數swap的任意指針的別名
//使用指向非const對象的指針初始化
{
 int *temp = s2;
 s2 = s1;
 s1 = temp;
}


void ptrswap2(const int *&s1,const int *&s2) //指向const對象的指針的引用
//形參定義的理解:const int *&a->a是一個引用,與指向int型const對象的指針相關聯。
//使用指向const對象的指針初始化
{
 const int *temp = s2;
 s2 = s1;
 s1 = temp;
}


/*********************************/
int main()
{
 int v1 = 1;
 const int v2 = 2;
 short v3 = 3;
 cout << v1 << " " << v2 << endl;


 use_ptr1(v1);
 use_ptr1(v2);
 cout << v1 << " " << v2 << endl;


 use_ptr2(v1);
 use_ptr2(v2);
 cout << v1 << " " << v2 << endl;


 use_ptr3(&v1);
 //use_ptr3(&v2);		//error:不能使用指向const對象的指針來初始化指向非const對象的指針
 cout << v1 << " " << v2 << endl; 


 use_ptr4(&v1);
 use_ptr4(&v2);
 cout << v1 << " " << v2 << endl;


 use_ptr5(v1);
 //use_ptr5(v2);		//error:不能使用const對象指初始化非const引用形參
 //use_ptr5(v3);		//error;不能使用不一樣類型的對象來初始化形參
 //use_ptr5(0);			//error:不能使用右值來初始化
 //use_ptr5(v1+v2);		//error: 不能使用右值來初始化


 use_ptr6(v1);
 use_ptr6(v2);
 use_ptr6(v3);			  //OK:類型轉換
 use_ptr6(0);		          //OK:右值
 use_ptr6(v1+v2);		  //OK:右值


 int a = 1, b = 2;
 int *p1 = &a;
 int *p2 = &b;
 const int *p3 = &a;
 const int *p4 = &b;
 
 ptrswap1(p1, p2);
 //ptrswap1(p3, p4);				//error:指向const對象的指針
 cout << *p1 << " " << *p2 << endl;
 
 //ptrswap2(p1, p2);				//error:指向非const對象的指針
 ptrswap2(p3, p4);
 cout << *p1 << " " << *p2 << endl;
 return 0;
}
相關文章
相關標籤/搜索