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

C++参数化构造函数参数设默认值与未设置的运行逻辑差异

原理说明

初始代码可以正常运行的核心原因是:你定义的带全默认参数的构造函数,本身就可以作为默认构造函数使用,相关规则如下:

  • C++中的默认构造函数,指的是不需要传入任何参数就能完成调用的构造函数,只要一个构造函数满足「所有参数都有默认实参」,就符合默认构造函数的要求。

你代码里的Complex(int r=0, int i=0)构造函数,所有参数都设置了默认值,当你写Complex c3;这条语句时,编译器会自动填入默认的r=0、i=0来调用这个构造函数完成c3的初始化,因此不会报错。

移除默认参数后报错的原因

当你把参数的默认值删除后,这个构造函数变成了Complex(int r, int i),必须传入两个int参数才能调用,此时你的类中不存在任何可以无参调用的构造函数:

  • C++编译器只会在你没有定义任何自定义构造函数的时候,自动生成一个无参的默认构造函数。一旦你自定义了任意构造函数,编译器就不会再自动生成无参构造函数。

此时你写Complex c3;要调用无参构造函数时,编译器找不到匹配的函数,就会抛出你看到的「no matching function for call to ‘Complex::Complex()’」错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:15:04