一般函数在进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中,而内联函数在调用时,是将调用表达式用内联函数体来替换,而不是定义在另一个函数体内(也就是编译器很生硬的将内联函数里面的执行语句“搬”到调用的地方),所以内联函数在调用时不发生控制权转移。
注意:
类 内部实现的函数都是内联函数,可以不用inline定义类 外部定义的函数必须加inline定义
对于内联函数,记住下面的结论即可:
结论中的第2条:内联函数只是一种请求,编译器不一定不一定允许这种请求,换句话说,编译系统并非对内联函数必须使用内联,而是根据具体情况决定。
由图可以发现,使用++a作为函数参数,使得宏替换和内联函数出现了2种截然不同的结果。
宏替换时,编译器非常机械的将2个变量进行替换,在此题的三目运算符中,第一个判断过后,a又再加了一次,因此得到的c也是3。
所以,一般情况下,尽量不要使用++a这种作为函数参数。
新闻热点
疑难解答