Gre*_*ill 31
它们不一定存储在任何地方.在最简单的情况下,编译器将编译一个函数调用,就像存在缺少的参数一样.
例如,
void f(int a, int b = 5) {
cout << a << b << endl;
}
f(1);
f(1, 5);
Run Code Online (Sandbox Code Playgroud)
这两个调用f()可能编译为完全相同的汇编代码.您可以通过要求编译器生成目标代码的程序集列表来检查这一点.
我的编译生成:
movl $5, 4(%esp) ; f(1)
movl $1, (%esp)
call __Z1fii
movl $5, 4(%esp) ; f(1, 5)
movl $1, (%esp)
call __Z1fii
Run Code Online (Sandbox Code Playgroud)
如您所见,生成的代码是相同的.