在c++中,可以为函数提供默认参数,这样,在调用函数的时候,如果不提供参数,编译器将为函数提供参数的默认值。下面从汇编看其原理。
下面是c++源码:
int add(int a = 1, int b = 2) {//参数a b有默认值 return a + b; } int main() { int c= add();//不提供参数 } |
下面是mian函数里面的汇编码:
; 4 : int main() { push ebp ; 5 : int c= add(); push 2;将2压栈,就是add函数中b参数的默认值 这里参数压栈方向是从右向左 ; 6 : xor eax, eax |
下面是add函数的汇编码:
?add@@YAHHH@Z PROC ; add ; 1 : int add(int a = 1, int b = 2) { push ebp ; 2 : return a + b; mov eax, DWORD PTR _a$[ebp];将参数a的值写入寄存器eax ; 3 : } pop ebp |
下面是只提供一个参数值得情况
先看c++源码:
int add(int a = 1, int b = 2) {//参数a b有默认值 return a + b; } int main() { int a = 3; int c= add(a);//只为a提供参数 } |