这个函数调用合法吗

来源:百度知道 编辑:UC知道 时间:2024/05/15 14:30:00
函数原型
void test(int a, int b = 7, char z = '*')

调用: test (6,'#');
我上机试了好象调用不了

void test(int a, int b = 7, char z = '*')

调用: test (6,'#');
这个是合法的
因为void test(int a, int b = 7, char z = '*')
b已经有了默认参数,所以调用
test (6,'#');
等价于
test (6,7,'#');
编译器会自动判断,所以是合法的

void main()
{
void test(int a, int b = 7, char z = '*') ;

test (6,'#');
}
void test(int a, int b = 7, char z = '*'){}

这样才合法,但什么也不做

在C++语言中,允许在函数的说明或定义时给一个或多个参数指定默认值。但是,要求在一个指定了默认值的参数的右边,不能出现没有指定默认值的参数。例如:

int add_int(int x, int 10);

在上述对函数add_int()的说明中,对该函数的最右边的一个参数指定了默认值。

在函数调用时,编译器按从左至右的顺序将实参与形参结合,当实参的数目不足时,编译器将按同样的顺序用说明中或定义中的默认值来补足所缺少的实参。例如,如有下列的函数调用表达式:

add_int(15)

它将与下列调用表达式:

add_int(15, 10)

是等价的。

在给某个参数指定默认值是,不仅可以是一个数值,而且还可以是任意复杂的表达式。

不合法 是从右到左的 test (6,'#');都有了默认的参数了

当然是合法的,不过第二个参数被转换成int型了。

test (6,'