目的
C++inline函数中过复杂的语句能否替换到函数调用处
步骤
1. 实验短小代码的inline函数,看是否能带入
测试代码如下:
inline int foo(int a, int b){
return a + b;
}
int main(){
int a, b, c;
a = 1;
b = 2;
c = foo(a, b);
return 0;
}
命令:
g++ -S a.cpp -o 1_*.s
实验结果:

其中各个编译结果说明:
- 左边是没加inline的函数调用的编译结果
- 中间是加inline的函数调用的编译结果
- 右边是直接将inline函数体带入函数的编译结果
结论:
结果发现左中相同,是不是说明inline没有起作用?
2. 采用编译优化选项,继续测试短小代码的inline函数
最后发现,编译时是可以不进行内联的。内联可以发生在编译优化时。所以加上**-O**对编译命令进行优化:【1】
g++ -S -O a.cpp
测试结果:

结论
可以看到左右两边不同,说明inline函数起到了代入函数作用。
3. 测试inline函数中过复杂的语句能否替换到函数调用处
被调用函数中增加语句,变为:
inline int Foo(int a, int b){
while(a--){
b++;
}
if(a>b)
return a;
else
return b;
}
int main(){
int a, b, c;
a = 1;
b = 2;
c = Foo(a, b);
return 0;
}
命令:
g++ -S a.cpp -o test_*.s
结果:

其中布局和第一张图相同。
问题:
对比左2与左3的汇编结果,可发现两文件main部分不同。左3与左4是相同的。所以是否可以说明inline体过复杂时,也能实现带入?
参考: