C++ 内联函数 auto关键字

2024-06-10 08:28
文章标签 c++ 函数 关键字 auto 内联

本文主要是介绍C++ 内联函数 auto关键字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

内联函数

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

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

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

auto关键字

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

关于auto修饰指针变量。

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

这篇关于C++ 内联函数 auto关键字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1047654

相关文章

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

C++11委托构造函数和继承构造函数的实现

《C++11委托构造函数和继承构造函数的实现》C++引入了委托构造函数和继承构造函数这两个重要的特性,本文主要介绍了C++11委托构造函数和继承构造函数的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、委托构造函数1.1 委托构造函数的定义与作用1.2 委托构造函数的语法1.3 委托构造函

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

C++11作用域枚举(Scoped Enums)的实现示例

《C++11作用域枚举(ScopedEnums)的实现示例》枚举类型是一种非常实用的工具,C++11标准引入了作用域枚举,也称为强类型枚举,本文主要介绍了C++11作用域枚举(ScopedEnums... 目录一、引言二、传统枚举类型的局限性2.1 命名空间污染2.2 整型提升问题2.3 类型转换问题三、C