繁体   English   中英

C ++默认参数值

[英]C++ default argument value

编译器在哪里存储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

如您所见,生成的代码是相同的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM