📅  最后修改于: 2023-12-03 14:59:47.953000             🧑  作者: Mango
在 C++ 中,函数重载和默认参数是非常常用的语法,它们可以让我们更加方便地编写代码,提高代码的可读性和可维护性。
函数重载是指在同一个作用域内,多个函数可以拥有相同的名称,但是参数列表不同,编译器会根据参数的类型、数量和顺序来确定调用哪个函数。
例如,下面这个例子演示了两个同名的函数 max
,一个用于比较两个整数的大小,另一个用于比较两个浮点数的大小:
int max(int a, int b) {
return a > b ? a : b;
}
float max(float a, float b) {
return a > b ? a : b;
}
int main() {
int x = 3, y = 4;
float f1 = 1.23, f2 = 4.56;
// 调用 int max(int, int)
int result1 = max(x, y);
// 调用 float max(float, float)
float result2 = max(f1, f2);
return 0;
}
需要注意的是,函数重载的规则是基于参数的类型、数量和顺序,因此以下代码是无法通过编译的:
int max(int a, int b) {
return a > b ? a : b;
}
float max(int a, int b) {
return a > b ? a : b;
}
默认参数是指在函数声明时可以给参数指定一个默认值,在函数调用时,如果没有传递该参数,则使用默认值。默认参数必须从右往左添加,也就是说,如果一个参数有默认值,则它右侧的所有参数都必须有默认值。
例如,下面这个例子演示了一个函数 print
,其中第二个参数 n
有一个默认值 1,如果不传递第二个参数,则默认打印一次:
void print(const char* str, int n = 1) {
for (int i = 0; i < n; i++) {
std::cout << str << std::endl;
}
}
int main() {
// 打印一次
print("Hello");
// 打印两次
print("World", 2);
return 0;
}
需要注意的是,一旦一个参数被指定了默认值,它就可以被视为可选参数,因此在函数调用时,必须将指定了默认值的参数放在后面,否则编译器会报错:
void print(int n = 1, const char* str) {
for (int i = 0; i < n; i++) {
std::cout << str << std::endl;
}
}
int main() {
// 编译错误
print("Hello");
return 0;
}
函数重载和默认参数是 C++ 中常用的语法,它们可以让我们更加方便地编写代码,提高代码的可读性和可维护性。需要注意的是,函数重载的规则是基于参数的类型、数量和顺序,而默认参数必须从右往左添加,否则编译器会报错。