C++ 函数重复声明对默认实参的影响

在 C++ 中,函数只能定义一次,但是可以多次声明,通常函数的默认实参可以在声明中指定,也可以在定义中指定(我觉得一般应该在声明处定义默认实参,因为在进行函数匹配的时候仅仅需要看到函数的声明),但是对于同一个参数不能在同一个作用域中指定两次,如以下代码,将会报重复定义错误:

int (*func(int a, int b = 10))[10];
int (*func(int a, int b = 20))[10];

clang 输出语法树的报错信息如下:
在这里插入图片描述
但是在重复声明的时候,可以指定不同默认参数的值,此时第二次声明是在第一次声明的基础上添加默认参数。如以下代码:

int (*func(int a, int b = 10))[10];
int (*func(int a = 10, int b))[10];

int main()
{
    
    
    func(1);
    return 0;
}

int (*func(int a, int b))[10]
{
    
    
    int *p = new int[10];
    int (*q)[10] = reinterpret_cast<int(*)[10]>(p);
    return q;
}

clang 输出语法树如下:
在这里插入图片描述分析以上语法树的输出,可以得出结论,多次声明的时候指定的不同实参相当于对默认实参的添加。

猜你喜欢

转载自blog.csdn.net/qq_21746331/article/details/117331123