MST

星途 面试题库

面试题:C++中函数默认参数在重载时的注意点

请说明在C++中,当一个函数有默认参数,同时又存在函数重载时,可能会出现哪些使用误区,并举例说明。
31.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

使用误区

  1. 混淆默认参数与重载函数匹配:当调用函数时,编译器会优先匹配参数列表完全一致的重载函数,如果不存在这样的函数,才会考虑使用默认参数的函数。这可能导致开发者以为会优先使用默认参数,而实际调用的是其他重载函数。
  2. 二义性问题:默认参数可能会与某些重载函数组合产生二义性,使得编译器无法确定应该调用哪个函数。

举例说明

#include <iostream>

// 函数1:有默认参数
void func(int a, int b = 10) {
    std::cout << "func(int a, int b = " << b << ") called, a = " << a << std::endl;
}

// 函数2:重载函数
void func(int a) {
    std::cout << "func(int a) called, a = " << a << std::endl;
}

int main() {
    func(5); // 调用func(int a),而非func(int a, int b = 10)
    // 如果同时存在func(int a, int b)的重载,下面调用会产生二义性
    // func(5, 20); // 编译器无法确定调用func(int a, int b)还是func(int a, int b = 10)
    return 0;
}

在上述代码中,func(5) 调用的是 func(int a) 这个重载函数,而不是使用默认参数的 func(int a, int b = 10)。如果再添加 func(int a, int b) 的重载,func(5, 20) 的调用就会产生二义性。