jsp做网站毕业设计/网络推广费用
对于引用的概念,本人看了一些书,看了一些网络上的文章,当时似乎看懂了,但是我确实不会使用引用,或者感觉不到用它的好处,还是指针使用起来更顺手。
很多人告诉我引用就是一个别名,然后给出下面的举例。
#include <iostream>
using namespace std;
int main(void)
{int a = 1;int &a1 = a;cout << a1 << endl;
}
问题是,既然变量a已经有自己的名字了,再给它起个别名来使用它,不是画蛇添足吗?
抱着这个疑问,继续往下看。又看到很多人使用下面的例子说明引用的用法。
#include <iostream>
using namespace std;
int main(void)
{int a = 1;int b = 2;swap1(&a,&b);swap2(a,b);
}
void swap1(int *pa, int *pb)
{int tmp;tmp = *pa;*pa = *pb;*pb = tmp;
}
void swap2(int &a, int &b)
{int tmp;tmp = a;a = b;b = tmp;
}
这个例子让学C语言的人看了莫名其妙,但是不管怎么说,它还是成功的实现了两个数据a和b的交换。问题是既然指针能实现的功能,你弄一个这玩意儿,还不是多此一举吗?
我们继续往下看。
#include <iostream>
using namespace std;
int main(void)
{int a = 1;int b = 2;swap2(a,b);cout <<'a=' << a <<'b=' << b << endl;
}void swap2(const int &a, const int &b)
{int tmp;tmp = a;a = b; //编译时报错b = tmp; //编译时报错
}
上面的代码直接编译不过,告诉我说a和b的值不能通过赋值来改变。这就有意思了。
到这里,或许我们意识到一点发明引用的真正意图了,那就是控制指针的作用范围。(因为指针的功能非常强大,如果使用不受控制,可能会造成野指针,变量被修改等等问题)。
请看下面的代码:
#include <iostream>
using namespace std;
int main(void)
{int a = 1;const int &a1 = a;a = 2; //给变量a赋值cout <<'a=' << a << endl; //a赋值成功//a1 = 3; //编译错误cout <<'a1=' << a1 << endl;
}
a=2 a1=2
从上面的代码可知,引用a1 被修饰为const,不可修改,给它赋值时,编译错误,但是a可以修改。这个功能可以实现参数传递,而保护了原来的值不被改变。
续贷…