run*_*ner 3 c++ default-arguments
考试期间我遇到了一个令人困惑的问题.请帮我理解这个概念.代码段包括:
void xyz(int a = 0, int b, int c = 0)
{
cout << a << b << c;
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是以下哪些电话是非法的?
(假设h和g被声明为整数)
(a) xyz(); (b) xyz(h,h);
(c) xyz(h); (d) xyz(g,g);
Run Code Online (Sandbox Code Playgroud)
代码:
(1)(a)和(c)是正确的 (2)(b)和(d)是正确的
(3)(a)和(b)是正确的 (4)(b)和(c)是正确的
我试图用C++编译代码,我得到了这个错误:
错误:预期';',','或')'在'='之前令牌
void xyz(int a = 0,int b = 0,int c = 0)
帮助我理解这个概念.
根据cppreference:
在函数声明中,在带有默认参数的参数之后,所有后续参数必须:
- 有一个在此声明或前一个声明中提供的默认参数; 要么
- 是一个函数参数包.
手段
void xyz(int a = 0, int b, int c = 0) // Not valid
{
//your code
}
Run Code Online (Sandbox Code Playgroud)
它有一个错误,因为它a有默认值,但是b它没有默认值.带有默认参数的函数声明的顺序必须是从右到左.
所以,使用
void xyz(int a = 0, int b=0, int c = 0) // Not valid
{
//your code
}
Run Code Online (Sandbox Code Playgroud)
让我们看一些c ++示例:
案例1: 有效的尾随默认值
void xyz(int a, int b = 2, int c = 3)
{
//your code
}
Run Code Online (Sandbox Code Playgroud)
案例2: 无效,领先默认值
void xyz(int a = 1, int b = 2, int c)
{
//Your code
}
Run Code Online (Sandbox Code Playgroud)
案例3: 无效,默认为中间
void xyz(int a, int b = 3, int c);
{
//Your code
}
Run Code Online (Sandbox Code Playgroud)