从C到C++ (3)
从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不做任何对齐操作,原先内存模型是什么样转换后还是什么样,只是类型转换了,此方法是不可移植的。而旧式强制类型转换”()”会做一些对齐操作。
随机推荐
- nutz 结合QueryResult,Record 自定义分页查询,不构建pojo 整合
public QueryResult getHistoryIncome(int d, int curPage) throws Exception { /**sql**/ Sql sql = Sqls. ...
- luogu P1121 环状最大两段子段和
嘟嘟嘟 一道说难也难说简单也简单的dp题. 我觉得我的(有篇题解)做法就属于特别简单的. 平时遇到环的问题都是断环为链,但这道题给了一种新的思路. 观察一下,最后的答案无非就这两种:xxx--xx-- ...
- win10的host设置
路径:C:\Windows\System32\drivers\etc\hosts 例如: 127.0.0.1 localhost 10.201.3.177 apmdbm1
- cascade DecodeBBox层
https://zhuanlan.zhihu.com/p/36095768 我的推断,第二第三阶段应该不是把所有anchor进行bounding box regression,然后再选取当前条件下的所 ...
- SSM命名规范框架
文件名 作用 src 根目录,没什么好说的,下面有main和test. main 主要目录,可以放java代码和一些资源文件. java 存放我们的java代码,这个文件夹要使用Build Path ...
- idea原生ajax数据处理(增删改查)
项目名称:Bookstore UI界面 项目文件 操作: jsp代码 <%@ page import="dao.BookDAO" %> <%@ page impo ...
- Android学习笔记_6_保存文件到SDCard
一.加入访问sdcard的权限 Environment.getExternalStorageState()方法用于获取SDCard的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态 ...
- HDU 1159 Common Subsequence(裸LCS)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Jav ...
- jquery 发送短信60后重新获取
先需要form表单,获取短信的按钮做成两个相同的,一个显示,一个隐藏. <div class="item"> <p clas ...
- MySQL里面的锁
MySQL里面的锁可以分为:全局锁,表级锁,行级锁. 一.全局锁:对整个数据库实例加锁.MySQL提供加全局读锁的方法:Flush tables with read lock(FTWRL)这个命令可以 ...