一、定义:

缺省参数(有些地方也叫做默认参数)是声明或定义函数时,为函数的参数指定⼀个缺省值。在调用该函数时,如果没有指定实参,则采用该形参的缺省值,否则使用指定的实参。

其中要注意:函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省值这个规则是为了确保代码的清晰性和一致性,避免在不同的编译单元(如不同的源文件)中由于缺省参数的不同而导致的不一致行为。如果函数定义中包含缺省参数值,那么这些值仅对在定义该函数的同一个编译单元中的调用有效。如果该函数在其他编译单元中被调用,并且没有相应的函数声明(或声明中没有包含缺省参数),那么编译器可能会报错或者采用非预期的行为。

// 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++规定半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值,这样传实参不容易有歧义