#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; }