首页 > 编程语言 >C++ inline

C++ inline

时间:2023-04-27 16:12:53浏览次数:33  
标签:函数 int C++ 编译器 函数调用 内联 inline

在C++中,inline关键字用于建议编译器将函数内联到调用它的地方。内联函数是一种优化技术,可以减少函数调用的开销。当一个函数被声明为内联时,编译器会尝试将函数的代码直接嵌入到每个调用该函数的地方,从而避免了函数调用时产生的额外开销,如保存寄存器、设置栈帧等。

需要注意的是,inline关键字仅仅是向编译器提出建议,编译器并不一定会对所有被声明为内联的函数进行内联处理。编译器可能会基于函数的大小、调用次数等因素来决定是否将一个函数内联。

内联函数在某些情况下可以提高程序的运行速度,但过度使用内联函数可能导致代码膨胀,从而降低程序的执行效率。因此,在决定是否使用内联函数时,需要仔细权衡其利弊。通常,内联函数适用于简单、执行速度要求较高的函数,或者用于减少函数调用次数的场合。

 

案例一:

#include <iostream>  
  
inline int add(int x, int y) {  
    return x + y;  
}  
  
int main() {  
    std::cout << add(1, 2) << std::endl;  // 输出 3  
    return 0;  
}

 

案例二:

#include <iostream>  
  
inline int max(int a, int b) {  
    return (a > b) ? a : b;  
}  
  
int main() {  
    std::cout << max(3, 5) << std::endl;  // 输出 5  
    return 0;  
}

 

案例三:

#include <iostream>  
  
inline void print(int x) {  
    std::cout << x << std::endl;  
}  
  
inline void print(const int \*p) {  
    if (p != nullptr) {  
        print(*p);  
    }  
}  
  
int main() {  
    print(1);  // 输出 1  
    print(&2);  // 输出 2  
    return 0;  
}

 

注意,内联函数的实现可能会因编译器实现而有所不同。此外,过度使用内联函数可能导致代码膨胀,从而降低程序的执行效率。因此,在决定是否使用内联函数时,需要仔细权衡其利弊。通常,内联函数适用于简单、执行速度要求较高的函数,或者用于减少函数调用次数的场合。


   

#########################

标签:函数,int,C++,编译器,函数调用,内联,inline
From: https://www.cnblogs.com/herd/p/17359232.html

相关文章

  • 【C++】引用、引用初始化、引用折叠规则
     引用引用就好像存储数据的一块内存区域(变量)的一个名字,定义引用就好像声明了一个变量名并把它绑定到已存在的变量上,变量名附带属性(包括但不限于类型、存储期),变量名附带的属性由声明变量名时使用的声明指定符决定。需要注意的是,用于声明左值引用的&和用于声明右值引用的&&不......
  • 开心档之C++ 预处理器
    C++预处理器预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。所有的预处理器指令都是以井号(#)开头,只有空格字符可以出现在预处理指令之前。预处理指令不是C++语句,所以它们不会以分号(;)结尾。我们已经看到,之前所有的实例中都有 #include 指令。这个宏用于把头......
  • 开心档之C++ 多态
    C++多态多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。下面的实例中,基类Shape被派生为两个类,如下所示:实例#include<iostream>usingnamespac......
  • 开心档之C++ 引用
    C++引用引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。C++引用vs指针引用很容易与指针混淆,它们之间有三个主要的不同:不存在空引用。引用必须连接到一块合法的内存。一旦引用被初始......
  • 开心档之C++ STL 教程
    C++STL教程在前面的章节中,我们已经学习了C++模板的概念。C++STL(标准模板库)是一套功能强大的C++模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。C++标准模板库的核心包括以下三个组件:组件描述容......
  • c++打卡第十七天
    一、问题描述二、设计思路①、对于每个小孩得所得到的糖果数我们可以定义一个数组存储它们。②、需要进行循环结构,同时循环停止的条件为10个小孩得糖果数相同。③、小孩所得得糖果为奇数时需要向老师要一块后才再次分一半给后一个小朋友,这时候我们需要选择结构来实现。④、我们......
  • C++ linux epoll并发服务器模型初探
    socket通讯流程图最简单的可以通讯的C++服务器端代码:#include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<netinet/in.h>#defineSERV_PORT8000intmain(void){intlfd......
  • 用C++编写一个简单的发布者和订阅者
    摘要:节点(Node)是通过ROS图进行通信的可执行进程。本文分享自华为云社区《编写一个简单的发布者和订阅者》,作者:MAVER1CK。@[toc]参考官方文档:Writingasimplepublisherandsubscriber(C++)背景节点(Node)是通过ROS图进行通信的可执行进程。在本教程中,节点将通过话题(To......
  • 基于C++的AI贪吃蛇
    访问【WRITE-BUG数字空间】_[内附完整源码和文档]用C++做了个有AI功能的贪吃蛇小游戏,希望大家enjoyit.总体概况开发环境:VIsualStudio2017开发语言:C++和少许WindowsAPI运行环境:Windows1001初始化工作-游戏设置游戏设置和相关初始化放在了一个类里面,并进行了静态声明。主要设......
  • 【C++】类与对象(上)
    系列文章之前的文章中讲解了,什么是类、类的实例化,以及封装的意义,若仍有不理解的部分可以移步上一篇文章  【C++】类与对象(引入)目录系列文章1.默认成员函数2.构造函数2.1定义2.2特性2.2.1重载构造函数2.2.2与缺省参数混合使用2.2.3默认构造函数3.析构函数3.1定义3.2特性4.拷贝构造......