面试题答案
一键面试- 编译器解析:
- 编译器会优先匹配参数个数完全相同或者参数个数可以通过默认参数补齐的函数。对于
func(10);
调用,编译器会匹配void func(int a, int b = 20);
这个函数声明,因为它可以通过默认参数,将调用补齐为func(10, 20);
。
- 编译器会优先匹配参数个数完全相同或者参数个数可以通过默认参数补齐的函数。对于
- 兼容性问题:
- 在符合C++标准的编译环境下,这种解析是具有一致性的,不会出现兼容性问题。C++标准明确规定了函数重载和默认参数的解析规则,所有遵循标准的编译器都会按照相同的方式处理这种情况。即优先寻找参数匹配度最高的函数,在可以通过默认参数补齐参数的情况下,使用默认参数来完成函数调用。但如果编译器存在对标准支持不完全或者有自定义扩展的情况,可能会出现兼容性问题。不过现代主流的编译器都对C++标准有较好的支持,所以在大多数情况下不会遇到此类问题。