引用

来源:互联网 发布:淘宝分销新手发货流程 编辑:程序博客网 时间:2024/05/04 11:55

一、函数参数引用

交换两个字符串,如下代码所示:

void swap(char *&x, char *&y)//指针引用,传入函数的是实参,不是形参{char *temp;temp = x;x = y;y = temp;}int main(){char *a = "My name is Ann.";char *b = "What's your name?";swap(a, b);return 0;}
采用二维指针代替引用

void swap(char **x, char **y)//二维指针代替引用{char *temp;temp = *x;*x = *y;*y = temp;}int main(){char *a = "My name is Ann.";char *b = "What's your name?";swap(&a, &b);//注意是a,b的引用return 0;}

二、函数返回值的引用

const float pi = 3.14f;float f;float f1(float r){f = r*r*pi;return f;}float& f2(float r){f = r*r*pi;return f;}int main(){float f1(float=5.0); //正确,函数f1默认参数调用float& f2(float=5.0);//正确,函数f2默认参数的调用float a = f1();//正确,f1的返回值赋给afloat& b = f1();//错误,函数f1里,f的值回复给一个临时变量temp,该temp有编译器隐式建立,建立该temp的引用b后,函数执行完毕,temp消失,导致错误float c = f2();//正确,f2的返回值未建立隐式临时变量temp,直接将全局变量f返回给主函数float& d = f2();//正确,函数直接使用全局变量的引用}


三、常量引用

class Test{public:void f(const int &arg);private:int value;};void Test::f(const int &arg){arg = 10;//错误,arg是一个常量类型的引用,值在函数体内不能被修改cout << "arg=" << arg << endl;value = 20;}int main(){int a = 7;const int b = 10;int &c = b;//错误,b为常量,c必须为常量引用const int &d = a;a++;d++;//d是常量引用,不能使用常量引用该变变量的值Test test;test.f(a);cout << "a=" << a << endl;  //输出,a=8return 0;}



0 0
原创粉丝点击