从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. IOS 远程推送通知(UIRemoteNotification)

    ●  什么是远程推送通知 ●  顾名思义,就是从远程服务器推送给客户端的通知(需要联网) ●  远程推送服务,又称为APNs(Apple Push Notification Services) ●   ...

  2. 【安卓】imageView.scaleType取centerCrop后,再用padding时显示异常?

    imgView.setCropToPadding(true);就可以         

  3. [转]Android Studio启动时出现unable to access android sdk add-on list

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/50563122 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的 ...

  4. 【洛谷P1107】 [BJWC2008]雷涛的小猫

    雷涛的小猫 题目链接 n^2DP比较好想, f[i][j]表示第i棵树高度为j的最大收益 直接从上到下转移即可,每次记录下max f[1~n][j] 用于下面的转移 f[i][j]=max(f[i][ ...

  5. normal 普通身份 sysdba 系统管理员身份 sysoper 系统操作员身份 dba和sysdba

    as sysdba 就是以sysdba登录,oracle登录身份有三种:normal 普通身份sysdba 系统管理员身份sysoper 系统操作员身份每种身份对应不同的权限 sysdba权限:●启动 ...

  6. Win7安装MinGW

    MinGW官网:http://www.mingw.org/ 点击下载,稍后就会跳转到下载页面 下载文件后是一个在线安装包,下载过程有点长 Basic Setup里的包都需要安装,点击Installat ...

  7. 9.Element-ui的校验规则Rules

    Element-ui的校验规则Rules <el-form label-position="left" label-width="80px" :model ...

  8. docker官方文档翻译5

    转载请标明出处: https://blog.csdn.net/forezp/article/details/80244682 本文出自方志朋的博客 堆栈(Stacks) 准备工作 安装Docker 1 ...

  9. C++求值顺序

    <C++Primer5th>中文版第124页 C++语言没有明确规定大多数二元运算符的求值顺序, 给编译器优化留下了余地. 这种策略实际上是在代码生成效率和程序潜在缺陷之间进行了权衡,这个 ...

  10. vsftpd文件服务参数汇总和虚拟用户使用

    FTP文件传输协议 FTP协议特点 基于C/S结构 双通道协议:数据和命令连接 数据传输格式:二进制(默认)和文本(w文本格式会修改文件内容) 两种模式:服务器角度 主动(PORT style):服务 ...