内联函数是怎么工作的?
如果是像宏那样代码替换,为什么下面的代码不能交换两个数?
inline void my_swap(int a,int b)
{
int tmp = a;
a = b;
b = tmp;
} inline
[解决办法]
宏代换发生在编译之前。
内联函数不是宏代换,再怎么内联,参数传值还是传引用的语义要维持正确。换句话说,语法效果上要做到跟没有内联时完全相同。所不同的仅仅是运行效率有可能好一些。
就你这个函数来说,它既没有返回值,也没有任何其它外部可见的副作用,编译器把它直接优化没了都有可能。
[解决办法]
inline void my_swap(int a,int b)
{
int tmp = a;
a = b;
b = tmp;
}
如果生成嵌入代码的话,可能会生成类似下面的代码:
{
int tmpa =a,tmpb = b; //保证 my_swap的值传递语义。
int tmp = tmpa; //交换代码,没有 a,b什么事。
tmpa =tmpb ;
tmpb = tmp;
}
如果进行编译优化,因为这段代码;
啥事也不做,纯属瞎忙。
全部会被优化掉,根本就不生成,任何代码。