在以下代码中:
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)值。
答案 0 :(得分:1)
在功能sum
中,您正在使用default arguments。这就是你致电
result = sum(a); // where a = 100 and the second parameter is ommited
在函数sum
中,第一个参数取此调用者的a (= 100)
的值,并且由于调用者的末尾没有第二个参数,将使用默认的b (= 20)
为b
。因此结果是
100 + 20
= 120
正如DavidRodríguez在第一条评论中所建议的那样,使用不同的变量名称(比如sum (int x, int y)
),没有歧义和更好的理解。
答案 1 :(得分:1)
int sum(int a=40, int b=20) {
...
}
如果未指定,将参数a
声明为40
,将b
声明为20
。这是一个编译器服务,因此sum(a)
变为sum(a, 20)
(b
未指定)。与此类似,sum()
变为sum(40, 20)
。方法a
中的b
和sum
为default parameters。
答案 2 :(得分:0)
为了缩短它:
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)
中,两个参数都有值=&gt; a+b
=&gt; 100 + 200
300
。
在sum(a)
中未设置第二个参数,该函数使用默认值(即:20)=&gt; a + 20
=&gt; 100 + 20
120
a
&amp;您在主要内容中定义的b
不 sum
函数
答案 3 :(得分:0)
好吧,你应该阅读一下C ++中的默认参数。你在哪里,我建议你研究一下重载,因为它们有些相关。
在对sum()函数进行的第一次调用中,为调用提供了两个参数,因此使用了您声明的变量a和b,因此得到100 + 200 = 300。在第二个调用tho,你只提供一个参数,所以第二个参数使用默认参数值,即a = 100,b得到默认值(20),所以得到100 + 20 = 120。
答案 4 :(得分:0)
当你写一个像这样的函数 returntype Function_name(data_type some_value),然后这称为默认参数。
例如:如果你写一个像这样的函数, int calculate_area(int lenght = 20,int width = 25)
然后当你从main调用这个函数时,你可以像这样传递值到length和width,
int main() {
int a=50;
int b=60;
calculate_area(a,b);
}
或者你可以这样称呼它......
int main() {
calculate_area();
}
看到差异,我们没有传递任何参数,仍然是对函数的有效调用,因为在这种情况下....将考虑您提到的长度和宽度的默认值,在这种情况下是20&amp; 25。
关于变量'a'和&amp;代码中的“b”看起来好像在变量名称之间感到困惑。 Main()和Sum()是两个不同的函数。 'a'的总和与主要的'a'无关。当您将阅读变量如何存储在堆栈中以及所有变量时,您将理解这一点。