C++ 函数使用进阶

1. 函数的默认参数

定义:在函数声明或定义时为参数指定默认值,调用时可省略对应参数
语法:

void func(int a, int b = 10, int c = 20);

示例:

void print(int a, int b = 2) {
    std::cout << a << " " << b << std::endl;
}
print(1);      // 输出: 1 2
print(1, 5);   // 输出: 1 5

注意:
• 默认参数只能从右往左连续设置,不能间隔。
• 声明和定义都写默认值时,值必须一致,建议只在声明或定义处写一次。

2. 函数的占位参数

定义:函数参数列表中出现未命名的参数(只写类型,不写变量名),称为占位参数,常用于兼容C或保留接口。
语法:

void func(int a, int) { // 第二个参数为占位参数
    std::cout << a << std::endl;
}

说明:
• 占位参数在函数体内不可用。
• 在C++11及以后,可以用void func(int, int = 0);实现占位和默认参数结合。

3. 函数重载的基本语法

定义:
同一作用域下,函数名相同参数列表不同(参数类型、个数或顺序不同),称为函数重载。
示例:

void show(int a) {
    std::cout << "int: " << a << std::endl;
}
void show(double a) {
    std::cout << "double: " << a << std::endl;
}
void show(int a, int b) {
    std::cout << "int, int: " << a << ", " << b << std::endl;
}

4. 函数重载的注意事项

• 仅参数列表不同才构成重载,返回值不同不能作为重载依据。
• 参数类型、个数、顺序至少有一项不同。
• 默认参数可能导致重载歧义,应避免与重载函数的参数个数、类型冲突。
• 函数名相同但在不同命名空间或类中,不构成重载(属于作用域不同)。
示例(歧义):

void func(int a, int b = 10);
void func(int a); // 调用func(1)时产生二义性,编译报错

总结

• 默认参数简化调用,注意只能右侧连续设置。
• 占位参数用于接口兼容或保留参数位。
• 函数重载要求参数列表不同,返回值不同不构成重载,注意避免默认参数引发的歧义。

你可能感兴趣的:(C++基础,c++,开发语言)