C++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没有起作用?
最后发现,编译时是可以不进行内联的。内联可以发生在编译优化时。所以加上**-O**对编译命令进行优化:【1】
g++ -S -O a.cpp
可以看到左右两边不同,说明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体过复杂时,也能实现带入?
参考:
不要低估编译器决定是否将inline函数实际内联到函数调用处使用的智商。
(^_^)