您的位置:首页 > 编程语言 > C语言/C++

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

2013-12-21 17:36 591 查看
宏不会被编译,因为在源码进入编译器之前,他会被预处理器去掉,因此尽量用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)如果函数体内有循环,那么执行函数代码时间比调用开销大。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: