具有初始化参数的函数定义和具有较少参数的函数调用
Function definition with initialized arguments and Function call with less arguments
我在考试中遇到了一个令人困惑的问题。请帮助我理解这个概念。代码片段包括在这里:
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++ 编译代码,但出现此错误:
error:expected ';',',' or ')' before '=' token
void xyz (int a = 0, int b = 0, int c = 0)
帮我理解这个概念。
根据cppreference:
In a function declaration, after a parameter with a default argument,
all subsequent parameters must :
- have a default argument supplied in this or a previous declaration; or
- be a function parameter pack.
表示
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
}
让我们看一些 C++ 示例:
案例 1:有效,尾随默认值
void xyz(int a, int b = 2, int c = 3)
{
//your code
}
案例 2:无效,前导默认值
void xyz(int a = 1, int b = 2, int c)
{
//Your code
}
情况3:无效,默认在中间
void xyz(int a, int b = 3, int c);
{
//Your code
}
我认为这是函数的错误定义。
void xyz(int b, int a = 0, int c = 0)
或
void xyz(int a = 0, int b = 0, int c = 0)
应该没问题。
将默认分配放在右边。
void xyz(int a , int b= 0, int c = 0)
{
count <<a<<b<<c;
}
这样称呼它:
xyz(2,3);
xyz(2,3,5);
我在考试中遇到了一个令人困惑的问题。请帮助我理解这个概念。代码片段包括在这里:
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++ 编译代码,但出现此错误:
error:expected ';',',' or ')' before '=' token
void xyz (int a = 0, int b = 0, int c = 0)
帮我理解这个概念。
根据cppreference:
In a function declaration, after a parameter with a default argument, all subsequent parameters must :
- have a default argument supplied in this or a previous declaration; or
- be a function parameter pack.
表示
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
}
让我们看一些 C++ 示例:
案例 1:有效,尾随默认值
void xyz(int a, int b = 2, int c = 3)
{
//your code
}
案例 2:无效,前导默认值
void xyz(int a = 1, int b = 2, int c)
{
//Your code
}
情况3:无效,默认在中间
void xyz(int a, int b = 3, int c);
{
//Your code
}
我认为这是函数的错误定义。
void xyz(int b, int a = 0, int c = 0)
或
void xyz(int a = 0, int b = 0, int c = 0)
应该没问题。
将默认分配放在右边。
void xyz(int a , int b= 0, int c = 0)
{
count <<a<<b<<c;
}
这样称呼它:
xyz(2,3);
xyz(2,3,5);