从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. OC typedef(起别名)

    // #define Integer int // 给基本数据类型起别名 void test() { typedef int Integer; typedef Integer MyInteger; t ...

  2. note02-计算机网络

    2.物理层 通信系统模型(源->发送器->XXX->接收器->终),源发出数字信号,调制器编码为模拟信号,进行传输,解调器解码模拟信号为数字信号给终 信噪比,香农公式,C=B  ...

  3. 从零开始Vue项目实战(四)-路由

    一.理解路由 传统的页面应用,是用一些超链接来实现页面切换和跳转的.而vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来. 路由中有三个基本的概念 route, rou ...

  4. java中String、StringBuffer和StringBuilder的区别(简单介绍)

    简单介绍 java中用于处理字符串常用的有三个类: 1.java.lang.String 2.java.lang.StringBuffer 3.java.lang.StrungBuilder 三者共同 ...

  5. C#多线程最简单Demo

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. Dubbo源码分析之ExtensionLoader加载过程解析

    ExtensionLoader加载机制阅读: Dubbo的类加载机制是模仿jdk的spi加载机制:  Jdk的SPI扩展加载机制:约定是当服务的提供者每增加一个接口的实现类时,需要在jar包的META ...

  7. 分享一个带有合计行功能的DataGridView扩展

    因为一个Winform的项目中需要用到带有合计行的表格,并且需要满足以下需求: 合计行可自动对需要求和的列进行求和计算; 合计行必须固定(冻结)在表格的最底部,且其位置不受滚动条的滚动而移动; 可以设 ...

  8. 路由器基本配置实验,静态路由和动态RIP路由

    实验涉及命令以及知识补充 连线 PC和交换机FastEtherNet接口 交换机和路由器FastEtherNet接口 路由器和路由器Serial接口 serial是串行口,一般用于连接设备,不能连接电 ...

  9. Swift_数组详解

    Swift_数组详解 点击查看源码 初始化 //初始化 fileprivate func testInit() { //空数组 var array = [Int]() print(array) arr ...

  10. lua浮点数取整

    向下取整 math.floor(num) 向上取整 math.ceil(num) 取整取余 math.modf(num) 测试 num = 12.4 print(math.floor(num)) 12 ...