为什么函数总是引用一个特定参数?

时间:2015-06-19 08:47:17

标签: c++ parameters

在以下代码中:

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)值。

5 个答案:

答案 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中的bsumdefault 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'无关。当您将阅读变量如何存储在堆栈中以及所有变量时,您将理解这一点。