我是靠谱客的博主 谦让菠萝,最近开发中收集的这篇文章主要介绍C++入门(2)---引用及内联函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  • 关于引用
    引用不是新的定义一个变量,而是给已存在的变量取个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。
    关于引用的定义:
    int a = 0; int& _a = a;
    引用类型必须和引用实体是同一个类型。
    *引用的特性:
    1.引用在定义时必须初始化。
    2.一个变量可以有多个引用。
    3.引用一旦引用一个实体,再不能引用其他实体。
    如果引用的变量 / 对象 是一个常量的话,在引用类型之前必须加 const. 否则会报错。
    引用类似于指针,如果函数的参数是引用变量的话,在函数内部变量值发生变化,外部被引用的实体值也会变化。例如:
    在这里插入图片描述
    如图所示,当Add函数中的引用实参_a, _b 的值改变后,对应外部主函数中的a. b 的值也发生了改变。
    当引用作为返回值时, 接受的变量也必须是引用类型。注:如果函数返回时,离开函数作用域后,其调用栈上的空间已经还给系统,因此不能用栈上的空间作为引用类型返回。如果以引用类型返回,返回值的生命周期必须不受函数的限制(即比函数的生命周期要长)。
    类似于指针,引用作为参数,或者返回指时效率比传值的效率高。
    在语法的概念上引用就是一个别名, 没有独立空间,和其引用的实体共用同一片空间。 在底层实现上是有空间的,因为引用是按照指针方式来实现的。

引用和指针的区别:
1. 引用在定义时必须初始化,指针没有要求
2. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实 体
3. 没有NULL引用,但有NULL指针
4. 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占4 个字节)
5. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
6. 有多级指针,但是没有多级引用
7. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
8. 引用比指针使用起来相对更安全。

内联函数
以 inline 修饰的函数叫做内联函数, 编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率。(直接将代码拷贝到调用的地方)
特性:
1.inline 是一种以空间换时间的做法, 省去调用函数额外的开销,所以代码很长或者有 递归 / 循环 的函数不适宜用内联函数。
2.inline 对于编译器而言只是一个建议, 编译器会自动优化, 如果定义为inline 的函数体内有 循环 / 递归等等, 编译器优化时会自动忽略掉内内联。
3.inline 不建议声明和定义分离,(即不在一个文件下),分离会导致链接错误, 因为inline 被展开,就没有了函数地址,链接就会找不到。
nullptr
NULL 通常表示空指针,但是NULL实际上是一个宏, 它表示 0 或者 (void*),这样在使用时不免出现一些问题。
nullptr 表示空值指针, 代表一个指针空值常量。nullptr是有类型的,其类型为nullptr_t,仅仅可以被隐式转化为指针类型。
注:
1.在使用nullptr 表示指针空值时,不需要包含头文件, 因为 nullptr是C++11中作为关键字引入的。
2.sizeof(nullptr) 和 sizeof((void*)0) 所占的字节数相同。
3.表示指针空指最好使用 nullptr。

最后

以上就是谦让菠萝为你收集整理的C++入门(2)---引用及内联函数的全部内容,希望文章能够帮你解决C++入门(2)---引用及内联函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部