为何C++中未实现成员函数的类可被实例化?
为什么C++中未实现成员函数的类可以被实例化?
先理清两个关键点:
- 你示例里的类A不是不完全类型,
class A { ... };是完整的类定义;真正的不完全类型是class B;这种仅声明未定义的类。 - 类的实例化和成员函数的实现是完全独立的两个环节。
具体原因:
- 编译器创建类对象时,只需要类的完整定义来确定对象大小、构造逻辑,根本不需要成员函数的实现。
你的类A没有非静态成员变量,编译器会给它分配1字节的占位空间(C++不允许空对象大小为0),同时自动生成默认构造函数,所以实例化A a;完全没问题。 - 成员函数的实现是链接阶段才需要的资源,只要你不调用这个未实现的函数,链接器就不会去查找它的实现代码,自然不会报错。一旦你调用
a.f(),不仅链接器会因为找不到f()的实现报错,编译器还会因为B是不完全类型(没有完整定义)而报错——因为返回B对象需要知道它的大小和构造细节。
简单说:类的完整性看的是类本身的定义是否完成,和成员函数实不实现没关系;实例化只依赖类的完整定义,不依赖成员函数的实现。
内容的提问来源于stack exchange,提问作者Amelie
相关产品推荐
相关产品推荐

