6.40:下面的哪个声明是错误的?为什么?

(a)int ff(int a,int b=0,int c=0);

(b)char *init(int ht=24,int wd,char bckgrnd);

Ans:b)的声明是错的。C++规定,要把没有默认实参的形参放到前面,而默认实参的形参写到靠右的位置,并且一个形参如果有默认实参,那么其右侧必须都有默认实参。

6.41:下面的哪个调用是非法的?为什么?哪个调用虽然合法但显然与程序员的初衷不符?为什么?

char *init(int ht , int wd = 80, char bckgrnd = ' ');

(a)init();  (b)init(24,10);  (c)init(14 , ' * ' );

Ans:a)非法调用。因为函数声明中有一个形参没有默认实参,在调用时应该提供一个实参,而不能全部省略。

     b)合法调用。将函数声明形参中的ht初始化为24,wd初始化为10,后面的形参保持不变。

     c)合法调用但是不符初衷。由于‘ * ’的十进制ASCII码是42,所以会将函数声明中的ht初始化为14,wd初始化为42,其他的保持不变。

 

 posted on 2018-08-16 17:57  linlh  阅读(136)  评论(0编辑  收藏  举报