C/C++、Java、Go、Python总结对比25-默认参数值

默认参数就是我们在定义函数的时候,有时候传入的参数大多数情况下都是使用同一个值,这个时候就需要定义默认参数的值来达到简化函数调用的目的。

个人理解他可以间接实现函数重载的效果。下面来看下各个语言的写法。

c的写法

c中没有默认参数值的概念,不过可通过宏定义间接实现默认参数值的效果。

#include <stdio.h>

//在宏定义中,宏参数名前加上#表示为一个字符串
//定义DEFARG宏,后面的判断表达式表示如果存在name的值,则为name,不存在则name的值为defval
#define DEFARG(name, defval) ((#name[0]) ? (name + 0) : defval)

int _f1(int i) {
    return 2 * i;
}

//定义_f1为f1函数,并将定义的DEFARG宏作为参数
#define f1(arg0) _f1(DEFARG(arg0, 0))

int _f2(int i, int j) {
    return i + j;
}

#define f2(arg0, arg1) _f2(DEFARG(arg0, 0), DEFARG(arg1, 1))

int main() {
    printf("%d\n", f1());
    printf("%d\n", f1(1));

    printf("%d\n", f2(,));
    printf("%d\n", f2(2,));
    printf("%d\n", f2(, 3));
    printf("%d\n", f2(4, 5));
    return 0;
}
//这个方法存在一个问题,对于有多个参数的函数,调用时需要将参数列表中的每个”,“写出来,不过这样也带来一个好处,可以把默认参数放在非默认参数之前。

c++的写法

#include <stdio.h>

//直接在传入参数后面添加等号值表示默认参数
//默认参数从右向左定义,也就是说void printNums(int firstnum=10, int secondnum)这种写法是错误的
void printNums(int firstnum, int secondnum = 10) {
    printf("firstnum is %d\n", firstnum+secondnum);
}

int main() {
    printNums(2);
    printNums(2, 12);
}

python的写法

def get_nums(firstname=3, secondname = 10):
    print("sum is " + str(firstname+secondname))


if __name__ == "__main__":
    get_nums()
    get_nums(2)
    get_nums(2, 12)

对比总结:

  1. c、java和go不能实现默认参数值,虽然c可以间接实现,但是在实际当中实现这个默认参数的过程就花费了不少时间,个人不赞同郑重方法。有这时间还不如复制几行然后稍微更改下。
  2. c++和python的默认参数实现写法大致相同,需要注意的是,c++的默认参数必须从右向左定义。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值