MST

星途 面试题库

面试题:C++函数默认参数与函数重载的关系

假设有一个C++类,类中有一个函数 `void func(int a, int b = 10);`,现在需要再添加一个 `func` 函数用于处理不同类型参数,如 `func(double c, int d = 20);`,请解释这样做可能会遇到的问题以及如何避免这些问题。
44.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

可能遇到的问题

  1. 二义性问题:当调用func函数时,如果传入的参数类型既可以隐式转换为int又可以隐式转换为double,编译器将无法确定应该调用哪个func函数,从而产生二义性错误。例如:
func(5.5);

这里5.5可以转换为double调用func(double c, int d = 20);,也可以转换为int调用func(int a, int b = 10);,编译器无法判断。

避免问题的方法

  1. 明确参数类型:在调用函数时,确保传入的参数类型明确匹配其中一个函数的参数类型,避免隐式类型转换导致的二义性。例如:
func(5); // 明确调用func(int a, int b = 10);
func(5.5, 30); // 明确调用func(double c, int d = 20);
  1. 使用函数重载解析规则:了解C++函数重载解析规则,尽量使函数参数类型差异明显,减少隐式转换可能带来的二义性。例如,改变其中一个函数的参数个数或类型,让编译器能够根据参数的数量或类型准确选择函数。
// 修改后的函数定义,减少二义性
void func(int a, int b = 10);
void func(double c, double d = 20.0); 

这样在调用时,编译器能更清晰地根据参数类型选择合适的函数。