面试题答案
一键面试- 是否构成函数重载:
- 这两个函数构成函数重载。函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表(参数个数不同、参数类型不同或参数顺序不同)的函数。在给定代码中,
void func(int a, int b = 10);
和void func(int a);
函数名相同,但参数列表不同(第一个函数有两个参数,第二个函数有一个参数),所以构成函数重载。
- 这两个函数构成函数重载。函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表(参数个数不同、参数类型不同或参数顺序不同)的函数。在给定代码中,
- 调用
func(5);
会调用哪个函数:- 调用
func(5);
会调用void func(int a);
函数。因为C++编译器在匹配函数调用时,会优先寻找参数完全匹配的函数。void func(int a);
函数的参数列表与func(5);
完全匹配,所以会调用这个函数。
- 调用
- 默认参数作用范围的影响:
- 这里默认参数
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
就会生效。
- 这里默认参数