C++编译器在哪里存储默认参数值?是全局堆、栈还是数据段?
谢谢 杰克
它们不一定会被存储在任何地方。在最简单的情况下,编译器将会如同缺失的参数存在一样,编译函数调用。
例如:
void f(int a, int b = 5) {
cout << a << b << endl;
}
f(1);
f(1, 5);
调用 f()
的这两个函数很可能编译成完全相同的汇编代码。您可以通过要求编译器为目标代码生成汇编清单来检查此内容。
我的编译器生成:
movl $5, 4(%esp) ; f(1)
movl $1, (%esp)
call __Z1fii
movl $5, 4(%esp) ; f(1, 5)
movl $1, (%esp)
call __Z1fii
如您所见,生成的代码完全一致。