【C++基础】inline与内联函数

2023-05-16

目录

      • 引入 inline 关键字
      • inline使用限制
      • 类中的成员函数与inline

引入 inline 关键字

为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了 inline 修饰符,表示为内联函数
栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间。如,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。

#include <stdio.h>
inline const char *num_check(int v){
    return (v % 2 > 0) ? "奇" : "偶";
}

int main(){
    int i;
    for (i = 0; i < 100; i++)
        printf("%02d   %s\n", i, num_check(i));
        //使用 inline修饰带来的好处表面看不出来,其实在内部在每个for循环的内部任何调用 num_check(i) 的地方都换成了 (v % 2 > 0) ? "奇" : "偶",避免了频繁调用函数对栈内存重复开辟所带来的消耗。
    return 0;
}

inline使用限制

inline 的使用是有所限制的,inline 只适合函数体内代码简单的函数使用,不能包含复杂的结构控制语句例如 while、switch,并且不能内联函数本身不能是直接递归函数(即,自己内部还调用自己的函数)。inline仅是一个对编译器的建议:并不是说声明了内联就会内联,声明内联只是一个建议而已。建议 inline 函数的定义放在头文件中:将内联函数的定义放在头文件里实现是合适的,省得为每个文件实现一次的麻烦。最好将内联函数定义放在头文件中。

类中的成员函数与inline

定义在类中的成员函数默认都是内联的,如果在类定义时就在类内给出函数定义,那当然最好。如果在类中未给出成员函数定义,而又想内联该函数的话,那在类外要加上 inline,否则就认为不是内联的。

class A{
    public:void function(int x, int y) {  } // 自动地成为内联函数
}

inline 是一种"用于实现的关键字"

//函数 Foo 不能成为内联函数
inline void Foo(int x, int y); // inline 仅与函数声明放在一起
void Foo(int x, int y){}
//函数 Foo 则成为内联函数:
void Foo(int x, int y);
inline void Foo(int x, int y) {} // inline 与函数定义体放在一起
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C++基础】inline与内联函数 的相关文章

  • 在 CSS 中绘制空的内联框?

    我确信这很简单 但我正在尝试画一组小的 空的 inlineHTML 中的框如下所示 span style border 1px solid black span 早些时候 我们制作了简单的 gif 图像 但随着浏览器显示的放大或缩小 图像看
  • 调用 __device__ 函数会影响 CUDA 中使用的寄存器数量吗?

    我在不同的地方读到过 device 函数几乎总是由 CUDA 编译器内联 那么 当我将代码从内核移动到内核中时 通常 使用的寄存器数量不会增加 这样说是否正确 device 内核调用的函数 例如 以下代码片段使用相同数量的寄存器吗 他们的效
  • 克隆背景图像并在文件名中添加括号

    我有一个背景图像 文件名中带有括号 div div 这通常很好 并且不会造成混淆 因为文件名周围有引号 然而 在 IE 的开发人员工具中 我发现浏览器出于某种原因删除了引号 div div 尽管如此 它仍然有效 所以没什么大不了的 当我尝试
  • C 头文件中的内联函数[重复]

    这个问题在这里已经有答案了 我试图在网上搜索一个好的答案 但未能找到一个我可以完全理解的答案 假设我有一个标头 add h inline int add int a int b return a b 名为 adddouble c 的文件 i
  • inline 决定内部链接吗?

    我正在尝试外部内联函数 我认为它应该如何工作 a cpp inline void f int b cpp extern void f int int main f 4 但出现链接错误 然后通过阅读this https en cpprefer
  • 如何将文本文件包含到JavaScript中

    有没有办法将另一个文件中的一些文本加载到 javascript 中 而不需要服务器端代码 我正在考虑使用另一个元素来保存一些注释中的文本 但我不知道如何使用 javascript 读取它的源代码 就像是 在 myfile js 中 some
  • 虚函数的实现可以放在头文件中吗

    通常 如果我们将非虚拟成员函数的实现放入头文件中 该函数将被内联 如果我们将虚拟成员函数的实现放在头文件中怎么样 我想这与将其放入 cpp 文件中是一样的 因为内联和多态性不能一起工作 我的说法正确吗 将方法的实现放入头文件中并不会使其内联
  • C++链接器会自动内联函数(没有“inline”关键字,没有在标头中实现)吗?

    C 链接器是否会自动内联 传递 函数 这些函数未在标头中定义 并且未明确请求通过inline关键词 例如 发生以下情况so often 并且应该always受益于 内联 似乎每个编译器供应商都应该通过链接器通过 内联 自动 处理它 在可能的
  • thymeleaf 内联 javascript 框架问题

    打印到文件中的替换文本与 Jackson 库的 ObjectMapper 所做的不同 对于上面示例中的 Thymeleaf listObject 将是 dataType type DataType name STRING friendlyN
  • jQuery - 内联调用函数

    我正在尝试将一个变量传递给内联 jQuery 函数 即 使用onMouseOver function 在实际链接内 这是图像映射中的区域标记 仅当我将其放在之前时才会调用该函数 document ready function 行 但这样做会
  • C# 会内联在接口中声明的方法吗?

    如果我有一个界面 interface IMyInterface void DoSomething 和一个实现类 class MyClass IMyInterface public void DoSomething DoSomething 是
  • 优化编译器中的常量组合

    我有一个包含许多小型内联函数的头文件 他们中的大多数碰巧拥有恒定的数据 由于这些函数对性能至关重要 因此它们处理常量的方式变得很重要 AFAIK 有两种方法来引用常量 1 在稍后与应用程序链接的单独源文件中定义它们 2 就地定义常量 我会选
  • Bootstrap 3 删除内联输入之间的空间

    我正在做一个简单的内联表单 如何调整每个输入表单之间的空白 我想让输入基本上接触 div class row div
  • Shadowbox - 打开内联元素

    我正在使用 Shadowbox 和 jQuery 我可以在页面加载时打开它 我想做的是 打开影子框并显示一个表单 用户可以在其中输入他们的电子邮件地址 然后我想通过ajax提交所述表单 我将表单转储到包含在隐藏 div 中的页面上 其 id
  • 带有 CSS 的 GWT Html 文件

    当我使用 GWT 插件创建新项目时 它会为我创建一个框架项目 在html文件中有一条注释说 考虑内联 CSS 以减少请求的文件数量 为什么我要考虑使用内联CSS 我很难将 css 放在单独的文件中而不是内联 会减少文件的大小吗 不是吗 答案
  • 为什么 C++17 中的全局内联变量和静态内联成员需要防护?

    从 C 17 开始 可以使用以下命令初始化标头中的全局变量和静态成员inline关键词 虽然我理解为什么函数中的静态变量需要受到保护 因为即使在多线程上下文中初始化也应该只发生一次 但我不明白为什么这些新的内联变量也受到保护 您可以在这里看
  • 在 Django Admin 中“通过”内联保存 M2M

    显然 如果 ManyToManyField 有中间表 Django 的 ModelAdmin ModelForm 不允许您使用 save m2m 模型 py from django db import models def make uui
  • 如何使用 PHP 发送带有内嵌附加图像的 HTML 电子邮件

    我有一个 PHP 脚本 它发送一封带有附加图像的 HTML 电子邮件 它工作得很好 但是 我无法让附件显示在 img 电子邮件正文中的标签 附件文件名为postcard png服务器上的原始文件名是4e60348f83f2f png 我尝试
  • 通用高阶函数

    当我将泛型函数作为本地值传递时 但在作为参数传递时却不能使用具有不同类型参数的泛型函数时 是否有原因 例如 let f id let g x y f x f y g 1 2 工作正常 但如果我尝试将函数作为参数传递 let g f x y
  • 我什么时候应该使用 -inl.h 文件?

    我刚刚注意到这个项目 http google styleguide googlecode com svn trunk cppguide xml showone The inl h Files The inl h Files in the G

随机推荐

  • static关键字在c/c++中的作用

    static关键字在c c 43 43 中的作用 static在c语言中有三个作用 xff1a 修饰函数 修饰局部变量 修饰全局变量 被static修饰的全局变量被称之为静态全局变量 静态全局变量和全局变量在存储方式上是一致的 xff0c
  • licurl API

    这个文档是小编在curl官网上使用谷歌翻译翻译的 xff0c 详细信息看官网 curl 描述 这是关于C程序中如何使用libcurl的简单概述 xff0c libcurl程序的使用需要通过以下5个方面libcurl easy libcurl
  • C语言:最大公约数详解

    C语言 xff1a 最大公约数详解 Hello xff01 小伙伴们大家好 xff0c 几天不见了 xff0c 今天给大家分享一下C语言中求最大公约数的三种方法 在开始分享前 xff0c 让我们先来看看什么是最大公约数 xff1a 最大公约
  • Java:遍历数组的三种方法

    1 for循环遍历数组 用for循环遍历数组是很常见的一种方法 xff0c Java语言中通过数组的length属性可获得数组的长度 span class token keyword package span demo span class
  • Linux:进程创建详解

    Linux xff1a 进程创建详解 进程创建1 fork函数写时拷贝调用失败的原因 2 vfork函数 进程终止正常退出的三种方法 exit和exit的区别 进程创建 现在我们已经知道进程的概念以及怎样创建一个进程 xff0c 接下来我们
  • Linux:简单理解文件系统内附Linux内核设计与实现PDF下载地址

    简单理解文件系统 文件系统ext2文件系统文件的存储文件的获取 文件系统 文件存储的方式有线性存储和离散存储两种 xff0c 线性存储可能会导致磁盘的利用率降低 xff0c 产生磁盘碎片 xff0c 离散存储方式会提高程序对磁盘的利用率 x
  • Linux:网络编程——UDP编程的前期准备

    Linux xff1a 网络编程 UDP编程的前期准备 字节序TCP与UDP的区别UDP编程的流程1 创建套接字创建套接字的意义 2 绑定地址信息 xff08 1 xff09 绑定ip和端口 xff08 2 xff09 函数 3 UDP发送
  • Xshell连接虚拟机时报错Could not connect to ‘192.168.115.133‘ (port 22): Connection failed.

    Xshell连接虚拟机时报错Could not connect to 192 168 115 133 port 22 Connection failed 今天突然想把拨号连接换成宽带连接 结果问题就来了 用下Xshell连接虚拟机的时候一直
  • Linux:简单三步,教你解决ping:www.baidu.com:未知的名称或者服务

    Linux xff1a 简单三步 xff0c 教你解决ping www baidu com 未知的名称或者服务 1 在VMware Workstation中点开编辑 xff0c 找到虚拟网络编辑器2 直接点击更改设置3 点击还原默认设置 x
  • C++:从结构体开始理解this指针

    C 43 43 xff1a 从结构体开始理解this指针 span class token macro property span class token directive keyword include span span class
  • 原来直接插入排序这么简单(附完整代码)

    原来插入排序这么简单 附完整代码 xff09 基本思想带哨兵位的插入排序二分插入排序完整代码 基本思想 做一件是之前我们总是要先知道我们做这件的核心思想 xff0c 这样会让我们做事的效率得到有效的提高 xff1b 现在我们来看看插入排序算
  • 一张图带你了解c/c++的内存分布

    c c 43 43 的内存分布 对照这些代码查看对应内存分布 xff1a span class token keyword int span globalVar span class token operator 61 span span
  • 用一个例子理解希尔排序

    用一个例子理解希尔排序 思想代码 思想 希尔排序是把序列按下标的一定增量分组 xff0c 对每组使用直接插入排序算法排序 xff1b 随着增量的逐渐减少 xff0c 每组包含的关键词越来越多 xff0c 当增量减至1时 xff0c 整个序列
  • c++ pi

    C 43 43 中表示pi的方法有两种 xff08 1 xff09 math库中利用arctan函数算出 span class token function tan span span class token punctuation spa
  • 【非数值数据的编码】西文字符和汉字的编码表示 汉字国标码、机内码详细理解

    西文字符和汉字的编码表示 西文字符概念ASCII码表特点 西文字符特点西文字符表示 xff08 常用编码为7位ASCII码 xff09 西文字符操作 汉字字符编码形式输入码字符集与汉字内码汉字的区位码汉字的国标码汉字内码 汉字的字模点阵码和
  • 修改centos7系统用户最大线程数和最大文件数限制

    修改centos7系统用户最大线程数和最大文件数限制 需要注意 xff0c 不同版本的Linux系统所对应的修改方法不同 ulimit 的作用 ulimit xff1a 显示 xff08 或设置 xff09 用户可以使用的资源的限制 xff
  • (已全部解决)ubantu18运行vins遇到的问题

    1 sudo rosdep init时报错 xff1a 打开hosts文件 sudo gedit etc hosts 在文件末尾添加 151 101 84 133 raw githubusercontent com 保存后退出再尝试 sud
  • ROS只使用思岚A1激光雷达进行slam建图

    使用思岚A1激光雷达 A1的ros功能包下载地址 xff1a https github com slamtec rplidar ros 因为只有激光雷达 xff0c 需要其做SLAM的话 xff0c 就需要有一个laser scan mat
  • STM32 四轴无人机的设计——基于HCSR04超声波模块的距离检测与警报设计

    1 系列总述 从现在开始将会进入四轴无人机的制作 xff0c 我是第一次制作四旋翼 xff0c 从前没有接触过这个方面 xff0c 手边的参考资料只有一本四轴的设计书和正点原子F405飞控的源码 xff0c 所以代码逻辑设计方面肯定有所欠缺
  • 【C++基础】inline与内联函数

    目录 引入 inline 关键字inline使用限制类中的成员函数与inline 引入 inline 关键字 为了解决一些频繁调用的小函数大量消耗栈空间 xff08 栈内存 xff09 的问题 xff0c 特别的引入了 inline 修饰符