C++ 普通内联函数 及内联函数与宏的区别

本文探讨了宏和内联函数在C++中的使用特点。分析了宏在提高程序效率的同时存在的局限性,如无法访问私有成员及定义二义性等问题。介绍了内联函数作为一种替代方案的优势,包括减少调用开销且保留了函数特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

宏的使用:

   因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销,所以调用一个宏比调用一个函数更有效率。

但是宏也有很多的不尽人意的地方。
1、宏不能访问对象的私有成员。

2、宏的定义很容易产生二意性。


内联函数:

  内联函数和宏的区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。你可以象调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。

我们可以用Inline来定义内联函数,不过,任何在类的说明部分定义的函数都会被自动的认为是内联函数。


内联函数的注意点:

1,内联函数使用inline开声明函数,声明之后编译器不会真正的创建函数,而只是将这个内联函数的所有代码复制到调用函数中,这样不会

跳转了,自然提高了程序的运行时的效率,但是复制代码会增大程序的体积。

2,内联函数的函数体过大,一般的编译器会放弃内联方式,而采用普通的方式调用函数。


在C++中,在类的内部定义了函数体的函数,被默认为是内联函数。而不管你是否有inline关键字。



//

//  inline.cpp

//  C++primary

//

//  Created by amesty on 16/5/11.

//  Copyright © 2016 travelrely. All rights reserved.

//


#include <stdio.h>

#include <iostream>

using namespace std;


inline int func(int); //使用inline将带有一个int变量并返回int值的函数func说明为内联函数


int main()

{

    int x;

    cout<<"请输入一个数字\n";

    cin>>x;  //将用户输入的数字保存在x变量中

    cout<<"\n";

    cout<<"输入的数字为:"<<func(x)<<endl; //将该变量作为参数传递到函数func(x)中。由于该函数是个内联函数,它的所有代码都被直接复制在该行的func(x)处,因此这里不会跳转到第12行去执行func函数体中的语句

    return 0;

}


int func(int x) //函数定义头

{            //函数体

    return x; //该行代码会被直接复制到第10行的func(x)

}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值