MST

星途 面试题库

面试题:C++ 函数默认参数与函数重载的复杂兼容性

考虑以下代码: ```cpp void func(int a, int b = 20); void func(int a, int b, int c = 30); ``` 当调用 `func(10);` 时,编译器会如何解析?如果在不同的编译环境下,这种解析是否会出现兼容性问题?为什么?
13.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

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