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

为何C++中未实现成员函数的类可被实例化?

为什么C++中未实现成员函数的类可以被实例化?

先理清两个关键点:

  • 你示例里的类A不是不完全类型,class A { ... };是完整的类定义;真正的不完全类型是class B;这种仅声明未定义的类。
  • 类的实例化和成员函数的实现是完全独立的两个环节。

具体原因:

  • 编译器创建类对象时,只需要类的完整定义来确定对象大小、构造逻辑,根本不需要成员函数的实现。
    你的类A没有非静态成员变量,编译器会给它分配1字节的占位空间(C++不允许空对象大小为0),同时自动生成默认构造函数,所以实例化A a;完全没问题。
  • 成员函数的实现是链接阶段才需要的资源,只要你不调用这个未实现的函数,链接器就不会去查找它的实现代码,自然不会报错。一旦你调用a.f(),不仅链接器会因为找不到f()的实现报错,编译器还会因为B是不完全类型(没有完整定义)而报错——因为返回B对象需要知道它的大小和构造细节。

简单说:类的完整性看的是类本身的定义是否完成,和成员函数实不实现没关系;实例化只依赖类的完整定义,不依赖成员函数的实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:36:03