6.5 特殊用途语言特性
6.5.1默认实参
我们可以给形参列表中的形参添加默认的实参。
如下形式
int func(int height,int width=123,char color='')
1。注意给一个形参赋予默认实参之后,其后面的所有形参都要赋予默认实参,所以在设计函数的时候,尽可能的需要手动传入参数的形参放在形参列表的前面。
2.默认实参不可以是局部变量,表达式只要能够转化为形参所定义的类型,都可以作为默认实参。
int w = 123;
int h = 123;
int func(int height=h,int width=1+5,char color=''){
}
以上赋予默认实参的方式都是可以的。如果变量是全局变量,可以调用函数之前修改变量的值,调用函数之后,默认实参的取值为全局变量最后一次修改的值。(大白话就是,如果默认实参是一个全局变量,那么全局变量变化,默认实参也会变化,因为形参的赋值,只发生在调用的时候,所以在这之前全局变量可以一直变化。)
3.C++中建议在头文件中写函数的声明,在源文件中写函数的定义。我们可以在声明的时候为函数赋予默认的实参,需要注意的是,如果同一个函数声明了多次,那么后续只能给没有赋予默认实参的形参赋予默认实参。
int func(int a,int b ,int c=1);
int func(int a,int b,int c =1);//错误c修改了默认实参
int func(int a,int b=1,int c=1)// 错误,c修改了默认实参
从上的代码可以看到,就算是一模一样的代码同时声明两次,也算修改了之前已经赋予默认实参的形参。
练习
6.40
b。因为有默认实参的形参后面所有的形参都要有默认形参
6.41
a。是非法的,因为ht没有默认实参,所以调用函数需要一个实参
b。合法
c。合法,但是和初衷不符,因为调用函数时,实参是从左往右给形参赋值,所以init(14,’*’)是分别给ht,和wd赋值。
6.42
string make_plural(size_t ctr,