一、定义:
缺省参数(有些地方也叫做默认参数)是声明或定义函数时,为函数的参数指定⼀个缺省值。在调用该函数时,如果没有指定实参,则采用该形参的缺省值,否则使用指定的实参。
其中要注意:函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省值。这个规则是为了确保代码的清晰性和一致性,避免在不同的编译单元(如不同的源文件)中由于缺省参数的不同而导致的不一致行为。如果函数定义中包含缺省参数值,那么这些值仅对在定义该函数的同一个编译单元中的调用有效。如果该函数在其他编译单元中被调用,并且没有相应的函数声明(或声明中没有包含缺省参数),那么编译器可能会报错或者采用非预期的行为。
// function.h
#ifndef FUNCTION_H
#define FUNCTION_H
// 函数声明,没有缺省参数
void printMessage(const char* message);
#endif // FUNCTION_H
// function.cpp
#include "function.h"
#include <iostream>
// 函数定义,包含缺省参数
void printMessage(const char* message = "Hello from function.cpp")
{
std::cout << message << std::endl;
}
// main.cpp
#include "function.h"
#include <iostream>
int main() {
// 尝试调用函数,没有传递参数,这将导致编译错误
//因为 main.cpp 中的 printMessage 声明没有缺省参数
printMessage();
// 如果我们显式传递参数,则不会有问题
printMessage("Hello from main.cpp");
return 0;
}
二、使用:
缺省参数分为全缺省(全部形参给缺省值)和半缺省参数(部分形参给缺省值)。半缺省参数的函数调用,C++规定必须从左到右依次给实参,不能跳跃给实参。而C++规定半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值,这样传实参不容易有歧义