const和引用

 所属目录:Java   |   类型:技术问答   |   时间:2007-05-21
 问题:

#include   <iostream.h>  
   
   
  void   main(   void   )  
  {  
  int   a[10];  
   
  int   (&b)[10]   =   a;  
   
  int   *   const   &c   =   a;  
   
  a[1]   =   5;  
   
  a[2]   =   8;  
   
  cout   <<a[1]   <<"   "   <<a[2]   <<endl;  
  cout   <<b[1]   <<"   "   <<b[2]   <<endl;  
  cout   <<c[1]   <<"   "   <<c[2]   <<endl;  
   
  }  
   
  关于初始化这两个引用的区别,看得懂的来说说吧!

· 网友精彩回答:

发表者:antter

第一个,b是a的引用  
  第二个,由a产生一个副本,c再对该副本引用。

发表者:dounier

第一个:b为a的引用  
  第二个:是用非常量初始化const型的引用,引用成为该变量的只读别名(很少见)

发表者:kingbin

output   by   g++  
  ----------   capture   output       !   ----------  
  5   8  
  5   8  
  5   8  
   
  output   completed   (0   sec   consumed)   -   normal   termination

发表者:siyang

经高手指点,解释如下:  
  int   a[10];定义一个数组,a是一个常量指针,不能改变  
  int   (&b)[10]   =   a;b定义成数组的引用,b是常量指针的引用,不能改变  
  int   *   const   &c   =   a;c定义成常量指针的应用,不能改变,如果把const去掉,编译出错  
  输出结果:  
  5   8  
  5   8  
  5   8

发表者:antter

我指的是指针的副本,  
  一,比如a指向0x40000那么,   b也指向0x40000  
  二,比如a指向0x40000那么会产生一个x指向0x40000,然后b再引用x也指向0x40000  
  对b操作那么也将对a操作,说指向不太好,但又不知如何表述。  
   
  简言之就是  
  一,   int&   b=a;  
  二       int&   x=a;int&   b=x;

发表者:jarvisyao

int   ival   =   1024;  
   
   
  //int   *   p   =   &ival;  
  int   *_tmp   =     &ival;                         //临时变量为non-lvalue  
  int   *p   =   _tmp;                                  
   
  //int   *   const   &   ri1   =   &ival;  
  int   *   const   &   ri1   =   _tmp;           //此后ri1不可能修改_tmp,若int   *&ri1   =   _tmp,就出错了  
   
  int   *   &   ri2   =   p;                             //不产生临时变量  
   
 

发表者:dounier

楼上的,这个确实要产生临时变量,你随便查查关于vc++的书就可以得到结论,比如比较垃圾的一本,vc++6.0从入门到精通

发表者:antter

int   ival   =   1024;  
  int   *   p   =   &ival;  
   
  不敢苟同产生临时变量。

发表者:kingbin

to   li1418(我很菜,我还笨)   兄  
   
  我的理解   type   &ival   这个应该是引用类型的数据吧  
   
  按来分析一下,不晓得对不  
  void   main(   void   )  
  {  
   
  int   ival   =   1024;     //   定义变量并初始化  
   
   
  int   *   p   =   &ival;   //   定义指针并初始化  
   
  int   *   const   &   ri1   =   &ival;    
  //   上面这句分解如下  
  //   int   *=   &ival  
  //   int   (&ril)   定义引用  
  //   int   const   (&ril)   定义常量应用(该“引用“的值为常量,在程序运行过程中不可更改)  
  //   int   *=   &ival   因为定义的是指向指针的引用(*&ril   可以参考primer   3.6小    
  //   节),这个可以从后面  
  //   指向初始化的值(&ival)为地址看出。  
  //   这里面type   const   *&ril   同   type   *   const   &ril,const   type   *&ril什么区别我也不晓得  
  //   如果兄弟弄明白了,或者那位大侠知道请介绍下  
   
  //   int   *   &   ri2   =   p;  
  //   这个就更easy了   指向pointer的引用  
   
   
  }  
   
   
   
  另外上面我post的代码确实有问题,因为我用得编译器版本太老了mingw   3.1   ^_^,我download了一个比较新的版本4.1   发现编译器不允许type   *ival   =   const   type   *ival  
  不过g++   gcc   win32平台下面支持std好的编译器内核好像用的都是这个,我的版本有问题,应该不能够否认这个编译器  
 

.
处理 SSI 文件时出错
© 2006-2008 All Rights Reserved