c++中define与inline的一些注意事项

    宏不会被编译,因为在源码进入编译器之前,他会被预处理器去掉,因此尽量用const代替。

     宏不是函数,只是在编译前预处理阶段将程序中有关字符串替换成宏体。因此要注意下列代码中的问题:

int a = 5, b = 0;
max(++a, b);// a 的值增加了2次
max(++a, b+10); // a 的值只增加了1次

    相比之下内联函数实现了宏的效率,但在编译中不单独产生代码,而是将有关代码嵌入到调用处。

inline max(int a,int b)
{
	return a>b?a:b;
}

     inline定义的内联函数,函数代码被放入符号表中,在使用时进行替换(像宏一样展开),效率很高。类的内联函数也是函数。编绎器在调用一个内联函数,首先会检查参数问题,保证调用正确,像对待真正函数一样,消除了隐患及局限性。inline可以作为类的成员函数,可以使用所在类的保护成员及私有成员。

     内联函数和普通函数相比可以加快程序的运行速度,但它是以增加程序存储空间为代价的,由于不需要中断调用,在编译内联函数的时候内联函数可以直接被嵌入目标代码中。

内敛函数的缺点:

    1)如果函数的代码较长,使用内联将消耗过多内存。

    2)如果函数体内有循环,那么执行函数代码时间比调用开销大。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值