首页 > 其他 > 详细

引用的特点

时间:2015-10-20 12:14:00      阅读:199      评论:0      收藏:0      [点我收藏+]

引用的语言层特点

  引用的作用是为变量起一个别名。

int a;
int &b = a;

int 牛二;
int & 二蛋 = 牛二;

  上例中,定义了一个变量a,而b是a的别名。牛阿姨生了一个Baby叫牛二,牛二有个小名叫二蛋。张大爷叫二蛋的时候,牛二知道叫的就是他。类似的,程序员在读写b的时候,也就是再读写a。

 

引用的主要用途

  1. 在于函数调用时,能通过修改形参的值而改变对应实参的值。
  2. 使用引用编程,程序员编程更加直观。

example 1:

#include <iostream>
using namespace std;

void swap(int a ,int b)
{
  int tmp;
  tmp = a;
  a= b;
  b = tmp;  
}

void main()
{
  int i = 1, j =2;
  ......
  swap(i,j);
  ......
}

  虽然编程看着挺直观,但是不能交换i,j的值,因为形参和实参是不同的内存单元。

example 2:

#include <iostream>
using namespace std;

void swap(int *a ,int *b)
{
  int tmp;
  tmp = *a;
  *a= *b;
  *b = tmp;  
}

void main()
{
  int i = 1, j =2;
  ......
  swap(i,j);
  ......
}

  用指针肯定能交换i,j的值,通过形参中的地址可以访问到原始的实参变量,可以修改实参的内容。但是,这种方式,编程不直观,总是要在变量前边加一个"*"号。

example 3:

#include <iostream>
using namespace std;

void swap(int &a ,int &b)
{
  int tmp;
  tmp = a;
  a= b;
  b = tmp;  
}

void main()
{
  int i = 1, j =2;
  ......
  swap(i,j);
  ......
}

  使用引用方式,既可以从形参那里修改实参的值,同时编程直观。

小结

  引用规避了直接传递和指针传递两种方式的缺点,而集中它们的优点,衍生出来的一种更优秀的传递方式。

 

==============================================================

引用的实现机制上

  引用的实现机制上,是一个“常量指针”。在最开始的例程中,定义了一个引用型变量b,编译器会将其按照指针的操作方式,将a的地址赋给b。

  引用用在函数调用上,本质上与指针传递参数没有差别。只不过指针传递参数有两个缺点,其一是操作不直观;其二指针指向可能会被修改,这样的编程不安全。而引用相当于是对指针传递参数这种方式进行了封装,规避了这两种缺点。对于程序员编程来说,他不再为指针传递参数的缺点而苦恼,因为编译器已经帮助他完成了这部分工作,而事实上他进行的操作就是指针传递参数。

 

  引用和指针传递参数无论是在效率上还是在空间上都是完全一样的,如果妄想不传入地址就修改实参的值,简直就是天方夜谭,这就说明引用的本质就是指针。毕竟它们的行为都太相似了,如果不是这样,你还有什么方法去实现引用吗?记住,引用只不过是编译器为你提供的一个有用且安全的工具,对于机器代码可无法表示它,它把指针一对多的缺点去除,禁止了你的不安全的操作。但回到问题的本源,他们没有任何区别。

                                摘自:引用的本质是什么?

 

参考博客:

  引用的本质是什么?
      从底层汇编理解 c++ 引用实现机制

引用的特点

原文:http://www.cnblogs.com/amanlikethis/p/4894276.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!