三沣开发知识 购物 网址 游戏 小说 歌词 地图 快照 开发 股票 美女 新闻 笑话 | 汉字 软件 日历 阅读 下载 图书馆 编程 租车 短信 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题
autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml
html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
  IT知识库 -> C++ -> C++的引用 -> 正文阅读
 

[C++]C++的引用

C++的引用 C++引用的学习:
通常引用第一个作用,人们会想到的是引用的变量的别名;(可以说是直接操作这个变量);
引用的声明:
Type + & + name(可以认为是一个常指针)
注意:(1)&是起标识符的作用;
   (2)声明引用时,必须先将其进行初始化;
   (3)不能建立数组的引用,因为数组是因为由若干个元素组成,所以无法建立一个数组的别名;
引用的应用:
(引用作为参数)

int swap(int &a, int &b)
{

    int t = a;
    a = b; 
    b = t;
} 

(引用作为常数)

int main()
{
  int b = 100;
  const int &a = b;
  return 0;
}

(引用作为返回值)
Type + & + 函数名
(1)以引用返回函数值,定义函数时需要在函数名前加&;
(2)用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。
但函数返回栈变量时,不能成为其他引用的初始值;(因为栈变量会因为函数结束后被释放掉)

int &fun()
{
    return a;    //这样当局部变量被释放掉的时候,对局部变量的引用会指向一片不知哪里的内存空间
}
int main()
{
    int &a = fun();
}
//这是错误的

并且不能成为左值;
函数返回静态变量或全局变量:(这两种变量都放在全局区)
可以作为其他值的引用,并且可以作为左值和右值;
以以上几种情况写一个代码:

//返回静态变量
int &fun1()
{
    static int a = 1;
    return a;
}

//返回局部变量
int &fun2()
{
    int a = 2;
    return a;
}

//参数是引用的
int &fun3(int &a)
{
    return a;
}

int main()
{
    int a = fun1();
    int &b = fun1();
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
}
/*运行结果为:
  a = 1;
  b = 1;
*/

 这是因为参数是全局的;

main()
{
    int a = fun2();
    int &b  = fun2();
}
/*
   运行结果为2和-2 (负数代表指向内存不明确)
*/

因为这是的引用是局部变量当第2个分号结束时就会指向不明确的内存区;

main()
{
  int c = 10;
int a = fun3(c); int &b = fun3(c); } /* 运行结果为 a = 10; b = 10; */

这时的引用是因为内存在程序结束之前不会被释放掉;
常引用:
  常引用声明方式:const 类型标识符 &引用名=目标变量名;
  用这种方式声明的引用,不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,达到了引用的安全性。
  int a ;
  const int &ra=a;
  ra=1; //错误
  a=1; //正确
  这不光是让代码更健壮,也有些其它方面的需要。
  string foo( );
  void bar(string & s);
  那么下面的表达式将是非法的:
  bar(foo( ));
  bar("hello world");
  原因在于foo( )和"hello world"串都会产生一个临时对象,而在C++中,这些临时对象都是const类型的。因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。
  引用型参数应该在能被定义为const的情况下,尽量定义为const 。
const引用和非const引用的区别:
const引用只读不可修改,与绑定对象是否为const无关。
非const引用可读可改,只可与非const对象对象绑定;
非const引用只能绑定到与该引用同类型的对象,const引用则可以绑定到不同但相关的类型的对象或绑定到左值;
const引用可以初始化为不同类型的对象或者初始化为右值,如字面值常量;
  C++ 最新文章
关于poin与references
019:别叫,这个大整数已经很简化了!
c++智能指针详解
BZOJ1269: [AHOI2006]文本编辑器editor
洛谷P3835 【模板】可持久化平衡树
洛谷P2925 [USACO08DEC]干草出售Hay For Sa
编译器是如何实现32位整型的常量整数除法优
枚举(enumeration)
hdu 6121
GetClientRect()和GetWindowRect()
上一篇文章      下一篇文章      查看所有文章
加:2016-06-20 13:09:48  更:2017-05-15 13:17:02 
 
技术频道: 站长资讯 .NET新手区 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA Visual Studio ASP.NET MVC .NET控件开发 Entity Framework WinRT/Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动设计 Html/Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP Oracle ERP Dynamics CRM K2 BPM 信息安全 企业信息化其他 Android开发 iOS开发 Windows Phone Windows Mobile 其他手机开发 敏捷开发 项目与团队管理 软件工程其他 SQL Server Oracle MySQL NoSQL 其它数据库 Windows 7 Windows Server Linux
脚本语言: vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程
网站开发: CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年7日历
2018-7-18 3:26:51
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT知识库