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

C++默认实参的转换是否纳入重载决议?析调用歧义争议

C++默认实参与函数重载歧义问题

考虑以下代码:

void foo(int* = 0); // (1)
void foo(int  = 0); // (2)

int main() {
    foo(0); // OK, calls (2)
    foo();  // error, ambiguous overload
}

GCC和Clang均表现出上述行为,但我对此正确性存疑。

C++标准[expr.call]第6款仅说明:

若无对应实参,则使用该形参的默认实参。

这表明调用foo()时会等价于foo(0),此时对于(1)需要将0转换为int*。因此我认为两次函数调用均应合法,但是否存在标准条款反驳此观点?默认实参的转换是否被视为“无代价”,不纳入转换序列考量?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:40:10