C++ 内联函数 auto关键字

内联函数

用inline修饰的函数会成为内联函数,内联函数会在编译的阶段在调用函数的位置进行展开,不会涉及建立栈帧以提高效率,同时每一次的函数调用都会展开整个函数导致内存消耗的增加,是以空间换时间,所以内联函数比较适合代码量小,调用频繁的函数使用。由于内联函数是展开不会有链接的过程,所以声明和定义不能分离,直接展开的内联函数并不会在函数列表中有地址。

内联函数在展开的时候也会因编译器的不同而有不同的实现,编译器会依据函数的实现逻辑完成展开,并不一定会完全照搬代码下来,而且在递归函数中内联函数会失效,多次递归会大量的建立栈帧再将内联函数展开会导致内存花销太大。若内联函数的代码量过大编译器也不会进行展开以避免内存过度消耗的情况。内联的声明是向编译器提交了一个展开请求,这个请求是否执行是编译器决定的并不是一定会被展开。

C++的内联函数更多是替代宏的,宏的使用会在预处理阶段进行代码的替换,这点并不适合调试,同时可读性很差,而且宏是直接替换很容易出现逻辑BUG,而且宏还没有类型检查。所以在C++中若是常量的定义可以使用const enum枚举常量替代,而短小的函数就是用内联函数替代。

auto关键字

auto是一个类型指示符,使用auto修饰的变量编译器会在编译阶段推导其类型。在C++中数据的类型越来越多也越来越复杂,所以使用auto来由编译器自动推导类型会方便许多。由于是编译器自动推导的,所以当我们用auto定义一个变量的时候就需要初始化,不能单独定义一个没有初始化的auto变量。

关于auto修饰指针变量。

auto修饰指针加不加*效果都是一样的但是引用的时候是需要加上&符号的。此外auto是不能直接用于数组声明和函数的参数类型的。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-10 17:38:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-10 17:38:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-10 17:38:01       82 阅读
  4. Python语言-面向对象

    2024-06-10 17:38:01       91 阅读

热门阅读

  1. 【Python入门与进阶】常见问题与解决方法

    2024-06-10 17:38:01       41 阅读
  2. 华为坤灵路由器配置telnet

    2024-06-10 17:38:01       34 阅读
  3. Position定位

    2024-06-10 17:38:01       32 阅读
  4. Docker日志相关命令

    2024-06-10 17:38:01       35 阅读
  5. TiDB Distributed NewSQL Database

    2024-06-10 17:38:01       33 阅读
  6. qt c++ 大小端字节序数据获取与转换

    2024-06-10 17:38:01       27 阅读
  7. GMT legend设置

    2024-06-10 17:38:01       38 阅读
  8. docker-compose部署mysql+nginx+redis

    2024-06-10 17:38:01       36 阅读
  9. vue面试题三

    2024-06-10 17:38:01       35 阅读
  10. C语言考试内容

    2024-06-10 17:38:01       26 阅读
  11. 881救生艇

    2024-06-10 17:38:01       32 阅读
  12. 音视频主要概念

    2024-06-10 17:38:01       33 阅读
  13. Dubbo的Cluster策略与Directory实现

    2024-06-10 17:38:01       28 阅读
  14. 单节点离线部署TiDB 6.1用于测试

    2024-06-10 17:38:01       25 阅读
  15. AtCoder Beginner Contest 355

    2024-06-10 17:38:01       37 阅读
  16. Docker镜像加速

    2024-06-10 17:38:01       28 阅读