MST

星途 面试题库

面试题:C++函数重载与默认参数的交互问题

在C++中,假设有如下函数声明:`void func(int a, int b = 10);` 和 `void func(int a);`,这两个函数构成函数重载吗?如果调用 `func(5);` 会发生什么?请解释原因。
13.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 是否构成函数重载
    • 这两个函数构成函数重载。函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表(参数个数或参数类型不同)的函数。在这两个函数声明中,void func(int a, int b = 10); 有两个参数,其中第二个参数有默认值,而 void func(int a); 只有一个参数,参数列表不同,所以构成函数重载。
  2. 调用 func(5); 的情况及原因
    • 调用 func(5); 时,会调用 void func(int a); 这个函数。原因是当存在函数重载且调用函数时提供的实参数量刚好与某一个函数的形参数量匹配时,编译器会优先选择参数完全匹配的函数。虽然 void func(int a, int b = 10); 可以通过默认值来接受一个实参,但编译器会优先选择参数数量直接匹配的 void func(int a); 函数,以避免不必要的歧义。如果不存在 void func(int a); 这个函数,编译器才会选择 void func(int a, int b = 10); 并使用默认值来调用。