You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++函数能否跳过前置默认参数仅给后置参数指定传值?

结论

标准C++原生不支持你提到的sum(y = 4)这种按参数名传参的调用方式。

原因说明

C++的默认参数遵循从左到右按位置匹配的规则,只有参数列表最右侧的连续参数才能省略、使用默认值。你定义的sum函数中x是第一个参数,不属于右侧连续可省略的参数,因此原生语法下不能跳过x直接给y传值,只能显式传入x的默认值写为sum(0, 4)。

替代实现方案

  • 方案1:新增函数重载(兼容所有C++版本,最常用)
    你可以额外定义一个只接收单个参数的sum重载,内部调用原函数并传入x的默认值:
int sum(int y) {
    return sum(0, y);
}

之后直接调用sum(4)即可得到预期结果4。

  • 方案2:使用C20指定初始化(语法最贴合需求)
    如果你使用C
    20及以上版本,可以把参数封装为带默认值的结构体,配合指定初始化实现按名传参:
struct SumArgs {
    int x = 0;
    int y = 0;
};

int sum(SumArgs args) {
    return args.x + args.y;
}

调用时直接写sum({.y = 4})即可,x会自动使用默认值0。

  • 方案3:使用第三方参数库
    如果需要在旧标准下实现大量参数的按需传值,可以引入Boost.Parameter等库实现按名传参,但实现复杂度较高,普通场景不推荐。

内容的提问来源于stack exchange,提问作者spinosarus123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:54:10