从C到C++ (3)

一、    C++中增加了引用

     1、引用是给某一个变量起别名。引用的一般格式:

类型 &引用名 = 变量名

      定义引用时一定要初始化。在实际应用中,引用一般用作参数传递与返回值

2、const 引用

const 引用是指向const对象的应用

3、引用作为返回值

函数返回引用的一个主要目的是可以将函数放在赋值运算符的左边,注意:不能返回对局部变量的引用。

4、引用与指针的区别

1)引用访问一个变量是直接访问,而指针是间接访问。

2)引用是一个变量的别名,本身不单独分配自己的内存空间,而指针有自己的内存空间。

3)引用一经初始化不能在引用其他的变量,而指针可以。

尽可能的使用引用,不得已使用指针(引用的效率高)。

二、    C++中提供了内联函数

  当程序执行函数调用时,系统要建立桟空间,保护现场,参数传递以及控制程序执行的转移等等,这些工作需要系统时间和空间的开销。对于代码短小、功能简单,但使用频率很高的情况下,使得程序执行效率降低。

  内联函数与带参数宏区别:

    1)内联函数在调用时会进行类型检查,另外内联函数会先对实参表达式进行求值,然后传递给形参;而宏调用时只是用实参简单的替换形参。

    2)内联函数是在编译的时候,在调用的地方将代码展开的,而宏则是在预处理时进行替换的。

在C++中建议采用inline来替换带参数的宏,C++高层次编程用cons、enum、inline替换宏,低层次编程宏是很灵活的。

三、    新的类型转换运算符

    旧式转换:

(T)expr

T(expr)

    新式转换:

const_cast<T>(expr)                //用来移除对象的常量性,通常为了函数能接受这个实际参数

static_cast<T>(expr)                //一般的类型转换

reinterpret_cast<T>(expr)         //数据以二进制存在形式重新解释(相当强制类型转换)

dynamic_cast<T>(expr)            //执行“安全向下”转型操作,无法用旧式方法进行转型的操作

  强制类型转换reinterpret_cast不做任何对齐操作,原先内存模型是什么样转换后还是什么样,只是类型转换了,此方法是不可移植的。而旧式强制类型转换”()”会做一些对齐操作。

随机推荐

  1. libevent-signal(2)

    上一节着重分析了event_init是如何集成signal,这一节从event_add展开分析 ev_events有四种类型 I/O事件: EV_WRITE和EV_READ 定时事件:EV_TIMEO ...

  2. 页面三个txt加载联动省市县的代码,类似淘宝的收货地址的布局

    页面三个txt加载联动省市县的代码,假如有一个树形的JSON,分别显示的省市县这时候三个TXT怎么做联动效果呢,这里用framework7为例HTML: <div class="lis ...

  3. hdu-2197 本原串---枚举因子+容斥定理

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2197 题目大意: 由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个 ...

  4. highcharts(前端报表生成)

    前端报表技术:使用 JavaScript 生成漂亮图表 百度 echarts: http://echarts.baidu.com/examples.html Funsioncharts : http: ...

  5. Java中基本类型和引用类型(简单介绍)

    8种基本类型  一.4种整型 byte      1字节           -128——127     short     2 字节         -32,768 —— 32,767     in ...

  6. js和.net操作Cookie遇到的问题

    Cookie初探1.我理解中的Cookie1.1.Cookie存储位置是客户端的1.2.Cookie存储数据,数据大小也是有限制的 2.Cookie的用法2.1.js对Cookie的操作(网上很多我就 ...

  7. Android学习笔记_9_SQLiteOpenHelper对象之数据库增删改查以及事务回滚操作

    一.SQLite数据库: 在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进 ...

  8. HDU 1180 诡异的楼梯(超级经典的bfs之一,需多回顾)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1180 诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)     ...

  9. 如何配置Java环境变量

    百度经验 | 百度知道 | 百度首页 | 登录 | 注册 新闻 网页 贴吧 知道 经验 音乐 图片 视频 地图 百科 文库 帮助   发布经验 首页 分类 任务 回享 商城 特色 知道 百度经验 &g ...

  10. oracle中lock和latch的用途

    本文向各位阐述Oracle的Latch机制,Latch,用金山词霸翻译是门插栓,闭锁,专业术语叫锁存器,我开始接触时就不大明白为什么不写Lock,不都是锁吗?只是翻译不同而以?研究过后才知道两者有很大 ...