初始化参数时会发生什么?C

What happens when you initialize a parameter? C++

本文关键字:什么 参数 初始化      更新时间:2023-10-16
void foo (int i , int k = 7) {
    cout << k;
}
int main(){
    foo(1, 2);    
}

k将输出2。我的问题是,FOO以什么顺序初始化参数并获取论点?FOO的过程是什么。

 void foo (int i , int k = 7);

此原型意味着,如果仅使用第一个参数调用foo,则第二个被隐式设置为7。

    foo(1, 2);  // i=1, k=2
    foo(5);  // <==> foo(5, 7)   i=1, k=7

编译器在编译时解决了此机制。每当丢失参数k的foo时,编译器都会使用值7(即foo(5))插入它。如果不丢失,则将获取实际参数(即foo(1, 2))。

您的示例与您在没有默认参数的情况下声明foo并没有什么不同。

默认参数由编译器处理。当编译器仅使用一个参数遇到foo的调用时,它将为您添加第二个参数。

例如:

foo(3);

将由编译器转换为

foo(3, 7);

仅此而已。

这称为函数初始化器。

如果您不将第二个参数分配为foo(1,2),则它将在屏幕上输出" 7"(当您使用foo(1)时)。