c ++数组默认参数,同时使函数重载

时间:2015-11-07 07:18:48

标签: c++ arrays default-parameters

Lauguage:C ++

我必须使功能'添加'超载。

'添加' function有一个数组a []作为参数。

我编写了我的代码,但它没有用。

没有任何错误或警告但它不会启动。

我的代码有什么问题?

int add(int a[], int n, int b[])
{
    int sum = 0;
    for (int i = 0; i < n; i++)
        sum += (a[i] + b[i]);
    return sum;
}

int add(int a[], int n=5)
{
    return add(a, n, NULL);
}

2 个答案:

答案 0 :(得分:1)

当你以你的方式声明像array这样的参数时(例如int a[]),编译器实际上将参数声明为指针。

add函数的三参数重载中,第三个参数(b)可能是一个空指针,您不检查它。尝试取消引用空指针会导致未定义的行为和可能的崩溃。

如果它是空指针,请不要访问b

int add(int* a, int n, int* b)
{
    int sum = 0;
    for (int i = 0; i < n; i++)
    {
        if (b == nullptr)
            sum += a[i];
        else
            sum += a[i] + b[i];
    }
    return sum;
}

答案 1 :(得分:1)

sum += (a[i] + b[i]);

索引b,可以是NULL。这是未定义的行为。

避免陷阱的一个好方法是使用std::vector