有默认值的所有函数参数都必须一起放在参数列表的最后。
在调用函数时省略一个实参,就必须省略参数列表中所有的后续的实参。因此,对于有默认值的参数,应把最不可能省略的参数放在前面,把最可能省略的放在最后。这些规则是编译器处理函数调用所必需的。
下面看一下有多个默认实参值的函数例子。
void show_data(const int data[], size_t count, std::string_view title,
size_t width, size_t perLine)
{
std::cout << title << std::endl;
for (size_t i {}; i < count; ++i)
{
std::cout << std::setw(width) << data[i];
if ((i+1) % perLine == 0)
std::cout << '\n';
}
std::cout << std::endl;
}
参数 data 是要显示的值的数组, count 指明了数据值的个数。
第三个参数的类型是 string_view,它指定输出的标题。
第四个参数确定每个数据项的字段宽度,最后一个参数是每行的数据项个数。
这个函数有许多参数,下面的例子给一些参数使用默认值:
#include <iostream>
#include <iomanip>
#include <string_view>
void show_data(const int data[], size_t count = 1, std::string_view title = "Data_Values",
size_t width = 10, size_t perLine = 5);
int main()
{
int samples[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
int dataItem {-99};
show_data(&dataItem);
dataItem = 13;
show_data(&dataItem, 1, "Unlucky for some!");
show_data(samples, std::size(samples));
show_data(samples, std::size(samples), "Samples");
show_data(samples, std::size(samples), "Samples", 6);
show_data(samples, std::size(samples), "Samples", 8, 4);
}
注意:只能省略参数列表中最后的几个参数!
例如:不能省略第2个和第5个参数:
// 以下是错误的参数省略做法
show_data(samples, , "Sampels", 15);