C++浅析引用的定义与使用
解释引用
首先我们先来看一个引用的例子
int main()
{
int a = 10;
int& Bin = a;
cout << a << endl;
cout << Bin << endl;
cout << &a << endl;
cout << &Bin << endl;
}
对于一个int型函数a,我们对a进行了引用,引用的新int函数叫Bin。
由他们是同一个地址可以知道,引用其实就是对同一个地址的函数,换了一个新的叫法。
相当于《水浒传》中,李逵在江湖上人称黑旋风
那么这里int a就相当于李逵,而int&Bin就相当于黑旋风。
你使用李逵和黑旋风,他都会答应,这也就相当于起外号
如下:
int main()
{
int a = 10;
int& Bin = a;
Bin += 10;
cout << a << endl;
cout << Bin << endl;
cout << &a << endl;
cout << &Bin << endl;
}
可以看到我们这里是对Bin进行操作,但是a的值也改变了。
同时我们也可以多个引用,可以给引用再引用(给外号再起外号)
int main()
{
int a = 10;
int& Bin = a;
int& Tian = a;
int& Wei = Bin;
cout << a << endl;
cout << Bin << endl;
cout << Tian << endl;
cout << Wei << endl;
cout << &a << endl;
cout << &Bin << endl;
cout << &Tian << endl;
cout << &Wei << endl;
}
可以看到值和地址还是相同。
注意:引用必须同等类型
int a=10;
double&b=a;
这是错误的
引用的作用
非常经典的引用就是交换两个数的值。
这是我们c语言的交换,这里形参不改变实参
void test1(int a,int b)//a,b不改变,因为a,b的生命周期只在swap函数内,结束swap后a,b就消失,不改变实参
{
int tmp = a;
a = b;
b = tmp;
}
int main()
{
int a = 1;
int b = 2;
test1(a, b);
cout << a << " " << b << endl;
}
然后我们学习了指针后,知道能直接交换地址
void test2(int* a, int *b)//使用指针,交换地址实现数字变换
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{
int a = 1;
int b = 2;
test2(&a,&b);
cout << a << " " << b << endl;
}
然后这是引用,引用是实参的外号,我们这里修改,是对实参的直接修改
void test3(int& a, int& b)//使用引用,a,b是实参的别名,相当于对实参的调用
{
int tmp = a;
a = b;
b = tmp;
}
int main()
{
int a = 1;
int b = 2;
test3(a, b);
cout << a << " " << b << endl;
}
注意:我们这里的引用都必须是合法的空间
Int &a = 10;//10并不是一个空间,只是一个数,这是错误的引用
关于局部变量的引用
int& test2()
{
int b = 10;
return b;
}
void test1()
{
int &a = test2();
cout << a << endl;
}
int main()
{
test1();
}
按照常理,这里test2中的b出了test2应该作为局部变量被回收,但是
我们依然能得到正确答案,这是因为编译器有对这种情况进行优化,但是仅限一次
如果我们这样
int& test2()
{
int b = 10;
return b;
}
void test1()
{
int& a = test2();
cout << a << endl;
cout << a << endl;
cout << a << endl;
cout << a << endl;
}
int main()
{
test1();
}
多调用几次打印
就会发现除了第一次是正常的,其余都是乱码。
注:如果实在是要这样搞,就加上静态变量Static。
int& test2()
{
static int b = 10;
return b;
}
void test1()
{
int& a = test2();
cout << a << endl;
cout << a << endl;
cout << a << endl;
cout << a << endl;
}
int main()
{
test1();
}
到此这篇关于C++浅析引用的定义与使用的文章就介绍到这了,更多相关C++引用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341