Z
ZHANK
编程在线教程C++ 教程默认参数与函数重载
函数与引用

默认参数与函数重载

默认实参规则、重载与默认参数的抉择、重载决议

默认参数与函数重载

默认实参让调用者可以省略某些参数,和函数重载结合使用要小心——两者可能产生歧义。

学完本章你将: 掌握默认实参规则、重载与默认参数的抉择。


默认实参

cpp
#include <iostream>

// 右侧参数才能有默认值
void greet(const std::string &name, const std::string &prefix = "你好") {
    std::cout << prefix << "," << name << "!\n";
}

int main() {
    greet("小明");                    // 你好,小明!
    greet("小红", "早上好");           // 早上好,小红!

    // greet("小明", , "!");          // ❌ 不能跳过中间的参数
    return 0;
}

⚠️ 默认参数必须从右向左连续给出——不存在"跳过中间的,给后面的默认值"。


默认实参 vs 函数重载

cpp
// 方式 1:默认参数
void draw(int x, int y, int color = 0) { }

// 方式 2:函数重载
void draw(int x, int y)         { draw(x, y, 0); }
void draw(int x, int y, int c)  { /* ... */ }

// ❌ 两者不能混用——会产生歧义
void f(int a, int b = 0) { }
void f(int a) { }              // 调用 f(5) 时编译器不知道选谁

头文件中的默认实参

cpp
// header.h
void func(int a, int b = 0);  // 默认值只在声明中写一次

// source.cpp
void func(int a, int b) {     // 定义中不重复写默认值
    // ...
}