我在考试期间遇到了一个令人困惑的问题。请帮我理解这个概念。代码段包括:
void xyz(int a = 0, int b, int c = 0)
{
cout << a << b << c;
}
现在的问题是以下哪个电话是非法的?
(假设h和g被声明为整数)
(a) xyz(); (b) xyz(h,h);
(c) xyz(h); (d) xyz(g,g);
代码:
(1)(a)和(c)是正确的(2)(b)和(d)是正确的
(3)(a)和(b)是正确的(4)(b)和(c)是正确的
我尝试用C ++编译代码,我收到了这个错误:
错误:预期&#39;;&#39;,&#39;,&#39;或者&#39;)&#39;之前&#39; =&#39;令牌
void xyz(int a = 0,int b = 0,int c = 0)
帮助我理解这个概念。
答案 0 :(得分:9)
根据cppreference:
在函数声明中,在带有默认参数的参数之后, 所有后续参数必须:
- 在此声明或先前声明中提供默认参数;或
- 是一个功能参数包。
意味着
void xyz(int a = 0, int b, int c = 0) // Not valid
{
//your code
}
这是一个错误,因为a
有默认值,但b
后面有void xyz(int a = 0, int b=0, int c = 0) // Not valid
{
//your code
}
没有默认值。带有默认参数的函数声明的顺序必须来自从右到左。
所以,使用
void xyz(int a, int b = 2, int c = 3)
{
//your code
}
让我们看一些c ++示例:
案例1: 有效,尾随默认值
void xyz(int a = 1, int b = 2, int c)
{
//Your code
}
案例2: 无效,领先默认
void xyz(int a, int b = 3, int c);
{
//Your code
}
案例3: 无效,默认为中间
DELETE
答案 1 :(得分:2)
将默认分配放在右边。
void xyz(int a , int b= 0, int c = 0)
{
count <<a<<b<<c;
}
这样称呼:
xyz(2,3);
xyz(2,3,5);
答案 2 :(得分:1)
我认为这个功能的定义是错误的。
void xyz(int b, int a = 0, int c = 0)
或
void xyz(int a = 0, int b = 0, int c = 0)
可以。