MST

星途 面试题库

面试题:C++函数默认参数作用范围与函数重载的关系

给定以下C++代码片段: ```cpp void func(int a, int b = 10); void func(int a); ``` 这两个函数构成函数重载吗?如果调用 `func(5);` 会调用哪个函数?请解释函数默认参数作用范围在这个过程中起到了怎样的影响。
16.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 是否构成函数重载
    • 这两个函数构成函数重载。函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表(参数个数不同、参数类型不同或参数顺序不同)的函数。在给定代码中,void func(int a, int b = 10);void func(int a); 函数名相同,但参数列表不同(第一个函数有两个参数,第二个函数有一个参数),所以构成函数重载。
  2. 调用func(5);会调用哪个函数
    • 调用 func(5); 会调用 void func(int a); 函数。因为C++编译器在匹配函数调用时,会优先寻找参数完全匹配的函数。void func(int a); 函数的参数列表与 func(5); 完全匹配,所以会调用这个函数。
  3. 默认参数作用范围的影响
    • 这里默认参数 int b = 10 是在 void func(int a, int b = 10); 函数声明中给出的。默认参数的作用范围是从声明处开始往后。在这个例子中,虽然 void func(int a, int b = 10); 函数有默认参数,使得它也可以通过 func(5); 这种单个参数的形式调用(此时 b 取默认值10),但由于存在参数完全匹配的 void func(int a); 函数,编译器会优先选择完全匹配的函数,所以默认参数在此次调用过程中没有起到作用。如果不存在 void func(int a); 函数,编译器才会选择 void func(int a, int b = 10); 函数,此时默认参数 b = 10 就会生效。