【c++学习笔记】缺省参数与函数重载

本文探讨了C++中的缺省参数与函数重载。C++对比C语言,对函数参数检查更严格,不允许无参数函数接收任意参数。缺省参数允许在调用时使用默认值,但不能同时在声明和定义中设置,且默认值必须是常量。函数重载是C++特有的,允许同名函数通过不同的参数列表实现。C语言不支持函数重载,主要原因是编译后的函数名字处理方式不同,导致链接时可能冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:缺省参数

1.c语言与c++在对函数参数检测时的区别

  • 首先可以创建一个c工程,测试以下代码:
void func()
{
    return;
}

int main()
{
    func();
    func(10);
    func(10, 20);
    func('c');
}

这里写图片描述

  • 可以发现在c语言中,函数没有指定参数列表时,默认可以接收任意多个参数,但在c++当中呢?,工程换作c++再试试上面的代码能否通过编译
    这里写图片描述

  • 结果编译器会报错,这是因为c++对于函数参数检测更加严格,如果函数没有参数则不能接收任何参数。

2.缺省参数的概念

  • 缺省参数时生命或者定义函数时为函数参数指定一个默认值,在调用该函数是,如果没有传参,则使用默认值,否则,使用指定的实参。
void func(int a = 1)
{
    cout << a << endl;
    return;
}

int main()
{
    func();//没有传参使用默认值
    func(10);//传参,则使用指定的实参
}

这里写图片描述

3.全缺省与半缺省

  • 全缺省参数
void func(int a = 1, int b = 2, int c = 3)
{
    cout << "a = "<< a << endl;
    cout << "b = "<< b << endl;
    cout << "b = "<< c << endl;
}
  • 半缺省参数
void func(int a, int b = 2, int c = 3)//缺省值只能从右朝左给
{
    cout << "a = "<< a << endl;
    cout << "b = "<< b << endl;
    cout << "b = "<< c << endl;
}

注意:

  • 缺省参数不能同时在函数声明和定义中,只能二者则其一
  • 缺省值必须是常量或者全局变量

二:函数重载

1.基本概念

  • 函数重载势函数的一种特殊情况,c++允许在同一个作用域中声明几个功能类似的同名函数(c不支持),这些同名函数的形参列表(参数个数、类型、顺序)必须不同。
int add(int left, int right)
{
    return left + right;
}
double add(double left, double right)
{
    return left + right;
}

long add(long left, long right)
{
    return left + right;
}

int main()
{
    add(10, 20);
    add(10.0, 20.0);
    add(10l, 20l);
}

2.为什么c语言不能支持函数重载(测试环境:vs2013)

  • 最主要的原因就是c和c++编译器对于函数的重命名风格不同,比如一个函数的声明如下:
void function(int x,int y); 
  • 在c语言中,编译器在编译后在库中的名字为_function ,在c++中,编译器在编译后在库中的名字为_function_int_int
  • 还有一个函数的声明如下:
void functionfloat x,float y); 
  • 在c语言中,编译器在编译后在库中的名字为_function。而在c++中,编译器在编译后在库中的名字_function_float_float。在链接时,都是找名字进行链接的,就比如以上两个函数,在C语言中两个的名字一样,就会在链接中报错。C++中它们的名字不一样,所以就不会报错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值