为什么函数总是引用一个特定的参数
Why does the function always refer to one specific parameter?
在下面的代码中:
int sum(int a=40, int b=20)
{
int result;
result = a + b;
return (result);
}
int main ()
{
int a = 100;
int b = 200;
int result;
result = sum(a, b);
cout << "Total value is :" << result << endl;
result = sum(a);
cout << "Total value is :" << result << endl;
return 0;
}
这会产生:
Total value is : 300
Total value is : 120
为什么:
sum(a)
将第二个块中的 (int a) 添加到第一个块中的 (int b)?
我很困惑为什么在 (sum(a) 中使用第一个块中的 (b) 值,但忽略第一个块中的 (a) 值。
int sum(int a=40, int b=20) {
...
}
声明参数a
要40
,b
要20
,如果未指定。这是一个编译器服务,因此sum(a)
变为sum(a, 20)
(b
未指定)。与此类似,sum()
变得sum(40, 20)
. 方法sum
中的a
和b
是默认参数。
在函数sum
中使用默认参数。这就是为什么当你打电话
result = sum(a); // where a = 100 and the second parameter is ommited
在函数sum
中,第一个参数取这个调用方a (= 100)
的值,当调用方端没有第二个参数时,默认的b (= 20)
将用作b
。因此结果是
100 + 20
= 120
正如大卫·罗德里格斯在第一条评论中建议的那样,使用不同的变量名称(比如sum (int x, int y)
),以免歧义和更好地理解。
为了缩短它:
int sum(int a=40, int b=20)
{
return a + b;
}
int main ()
{
int a = 100;
int b = 200;
cout << "Total value is :" << sum(a, b) << endl;
cout << "Total value is :" << sum(a) << endl;
return 0;
}
在sum(a,b)
两个参数的值 => 它a+b
=> 100 + 200
这是300
。
在未设置第二个参数sum(a)
,函数使用默认值(即:20)=> a + 20
=> 100 + 20
即120
您在 main 中定义的a
和b
不是sum
函数之一
好吧,您应该阅读一些有关C++默认参数的信息。在你在哪里,我建议你研究一些关于重载的信息,因为它们有些相关。
在第一次调用 sum() 函数时,为调用提供了两个参数,因此使用了您声明的变量 a 和 b,因此得到 100+200=300。在第二次调用时,您只提供一个参数,因此第二个参数使用默认参数值,即 a=100,b 获取默认值 (20),因此您得到 100+20=120。
当你编写一个函数时,比如 返回类型 Function_name(data_type some_value),则称为默认参数。
例如:如果你写一个函数,比如,int calculate_area(int length=20, int width=25)
然后,当您从main调用此函数时,您可以像这样将值传递给长度和宽度,
int main() {
int a=50;
int b=60;
calculate_area(a,b);
}
或者你可以这样称呼它...
int main() {
calculate_area();
}
看到区别,我们没有传递任何参数,它仍然是对函数的有效调用,因为在这种情况下......将考虑您提到的长度和宽度的默认值,在本例中为 20 和 25。
关于代码中的变量"a"和"b",看起来您在变量名称之间感到困惑。Main() 和 Sum() 是两个不同的函数。总和的"a"与主的"a"无关。当您阅读变量如何在堆栈中存储时,您将了解这一点。
- 构造函数在退出函数时无法初始化一个参数
- 运算符重载:"operator+"必须采用零个或一个参数
- 如果需要转换,我可以在读取参数的同时将其移动到另一个参数吗?
- 两个函数模板候选项.将一个参数作为引用后,选择不太专业的模板
- 如何设置默认参数以防用户不输入另一个参数
- 使用一个参数的模板函数时出错(适用于 2)
- 仅当一个参数中未使用 std::function 时,模板函数替换才有效
- 如何在两个树通用的函数中创建一个参数?
- 使用带有一个参数函数的递归找到数字的平方
- 专门处理一个参数(C++模板)的两个模板参数
- 模板函数,其中一个参数需要专门化,而另一个不需要
- 如何更改参数包中的最后一个参数
- C++ 如何使用一个参数从派生类构造函数中调用具有两个参数的超类构造函数
- 模板参数重载,最后一个参数为非类型名
- 根据一个参数对数组进行排序
- 是否可以将指针传递给运算符,作为一个参数,例如指向函数的指针
- 用一个参数计数圆形链接列表中的节点
- 将数组作为一个参数从一个函数传递到C 中的另一个函数
- 将另一个参数传递给函子的库
- 分叉:使用一个参数运行 shell 时资源暂时不可用