C++中的内联函数(inline)

在C++程序中符合下列条件的函数为内联函数:

1. 函数说明前冠以“inline”关键字的函数
2. 类内定义的函数成员

将函数体短小而又频繁调用的函数说明为内联函数可以提高程序运行效率。

利用编译预处理的宏定义方式(#define)也可以实现类似于内联函数(inline)的功能。不过,内联函数的方式更为方便和可靠。

// 例如
inline int MAX(int a, int b) { if(a > b) return a; return b;}
// 等价于
#define MAX(a, b) { (a > b) ? a : b}

虽然带参数的宏定义的功能与对应的内联函数基本一致,但仍然是有差别的:宏定义中的参数和计算结果没有类型说明,编译时不可能进行类型检查,是不安全的,更无法区分赋值参数和引用参数,很容易出错。

因此,C++语言的编程中,当某段程序短小而又经常被重复时,建议采用内联函数,少用宏定义实现。

举一个宏定义容易出错的例子:

#define f1(x) x*x
#define f2(x) (x)*(x)
#define f3(x) ((x)*(x))

int a=3, b=4, c=16;

cout<<f1(a+1); //因为a+1*a+1=3+1*3+1=7,所以结果是7
cout<<f2(a+1); //因为(a+1)*(a+1)=(3+1)*(3+1)=16,所以结果是16

cout<<c/f2(b); //因为16/(4)*(4)=16,所以结果是16
cout<<c/f3(b); //因为16/((4)*(4))=1,所以结果是1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值