C++下的引用类型(C++入门)_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > C++下的引用类型(C++入门)

C++下的引用类型(C++入门)

 2012/12/16 17:23:55  yshlin  程序员俱乐部  我要评论(0)
  • 摘要:引用类型也称别名,它是个很有趣的东西。在c++下你可以把它看作是另外的一种指针,通过引用类型我们同样也可以间接的操作对象,引用类型主要是用在函数的形式参数上,通常我们使用它是把类对象传递给一个函数。引用对象采用类型名加上&符号和名称的方式进行定义。例如:(int&s;),这里我们就定义了一个int类型的名为s的引用,但是int&s;这样的方式是不能够被编译成功的,因为引用的定义必须同时给应用进行赋值操作,这里的赋值并不是说把变量的值传递给引用,而是把引用指向变量
  • 标签:c++

引用类型也称别名,它是个很有趣的东西。在c++ 下你可以把它看作是另外的一种指针,通过引用类型我们同样也可以间接的操作对象,引用类型主要是用在函数的形式参数上,通常我们使用它是把类对象传递给一个函数。 引用对象采用类型名加上&符号和名称的方式进行定义。例如:(int &s;),这里我们就定义了一个int类型的名为s 的引用,但是int &s;这样的方式是不能够被编译成功的,因为引用的定义必须同时给应用进行赋值操作,这里的赋值并不是说把变量的值传递给引用,而是把引用指向变量,写成这样就对了:(int &s=变量名;)。

#include <iostream>  
using namespace std;  
  
void main(void)  
{  
  
int a=10;  
int &s=a;  
s=s+2;  
  
cout << &a << "|" << &s << "|" << a << "|" <<s<< endl;  
  
cin.get();  
} 

?
  观察并编译运行上面的代码你会发现&a和&s的地址显示是相同的,a和s的值显示也是一样的!
  结合前一个教程的内容我们来说一下const引用的相关内容,这里要特别注意,和前一个教程一样带const修饰的引用同样也容易混淆概念!

  const修饰如果用在引用上会有一个特别之处,它的奥妙就在于可以进行不同类型的对象的初始化,而这一切在普通变量操作上是不可能的下面我们来看一个例子

#include <iostream>  

using namespace std;  

void main(void)  

{  

int a=10;  

//double &s = a + 1.2f; //这句就是错误的!  

const double &s = a + 1.2f;  

cout << &a << "|" << &s << "|" << a << "|" <<s << endl;  

cin.get();  

}

?
  上面的代码足够说明问题了,这就是const修饰带来的好处,但是聪明的人会在输出的时候发现一个问题,就是a和s的值的输出不同,按照最先说的道理应该可以改变a的值呀,为什么在这里却有没有能够改变呢?

  道理是这样的,const修饰过后的引用在编译器内部是这样进行变化的。

int a=10;??
const double &s= a + 1.2f;


  这样的一段代码在编译器认为却是下面的方式进行的

int a=10;??
int temp = a;??
const double &s = temp + 12.f


  这里其实是把a的值赋给了一个临时temp 变量,而后test获得的却是temp+12.f 改变的是temp而不是a,所以就出现了a和s显示的值不同的情况,这里要特别注意,这是一个很容易混淆的地方,在编写程序的时候要特别仔细,以免出现了问题却检查不出为什么!

发表评论
用户名: 匿名