从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. PHP设计模式——观察者模式

    PHP版本 <?php /** * 观察者模式 * 观察者模式能够便利的创建查看目标对象状态的对象,并且提供与核心对象非耦合的指定性功能. * * 为软件添加由某个动作或状态变化激活的,但是松散 ...

  2. 如何从GitHub获取源代码

    如何从GitHub获取源代码 github是当前流行的开源项目托管网站,里面有成千上万的项目值得学习和借鉴,可以把项目源代码下载到本地研究.本文介绍如何获取github的源代码. 方法1 - 克隆(C ...

  3. heidsql(mysql)安装教程和mysql修改密码

    简单介绍安装 官网下载:https://mariadb.org/download/ 直接下载(mariadb-10.3.9-winx64.msi):https://github.com/weibang ...

  4. VS2012 Getting Started with Owin and Katana

    参考地址:http://www.asp.net/aspnet/overview/owin-and-katana/getting-started-with-owin-and-katana 小提示: 该示 ...

  5. Angularjs 数据循环

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  6. Restframework的版本及分页

    1.版本 1.1基于url的get传参方式 1.创建django项目(起名我的是version),再创建一个app01应用 创建完成,通过python3 manage.py startapp api ...

  7. 利用css transition属性实现一个带动画显隐的微信小程序部件

    我们先来看效果图 像这样的一个带过渡效果的小部件在我们实际开发中的应用几率还是比较大的,但是在开发微信小程序的过程中可能有的小伙伴发现transition这个属性它不好使(下面说明)所以我们这个时候会 ...

  8. vue2高仿饿了么app

    Github地址: https://github.com/ccyinghua/appEleme-project 一.构建项目所用: vue init webpack appEleme-project ...

  9. docker官方文档翻译3

    转载请标明出处: https://blog.csdn.net/forezp/article/details/80171723 本文出自方志朋的博客 第三部分: 服务 准备工作 安装Docker 1.1 ...

  10. c# 任务超时执行组件

    最近整理下各类框架,学习一下欠缺的东西.因为前一年开发过java服务端,知道java有很多开源框架,但是毕竟起来也很累. 现在转回头从新审视c#,很基础,没有开源框架,因为以前它不开源,所以少,不用比 ...