为何C++中仅声明成员函数的类可成功实例化对象?
为什么仅声明成员函数的类可以正常实例化对象?
先看示例代码:
class Base{ public: int fcn(); }; int main() { Base b; // clause 1 }
这段代码能正常编译运行的原因核心在于C++编译与链接阶段的分工,以及对象实例化的实际需求:
- 对象实例化只需要编译器确定类的内存大小和布局:成员函数的声明不会占用对象的内存空间(成员函数属于类本身,存放在代码段,而非每个对象的内存中)。这里Base类没有非静态数据成员,编译器会为它分配1字节的最小内存(用来区分不同对象的内存地址),完全能确定大小,所以实例化操作可以正常完成。
- 未定义的成员函数仅在被调用时才会触发链接错误:这段代码里根本没有调用
fcn(),链接器不会去查找它的定义,自然不会报错。只有当你在代码中加入b.fcn();这类调用语句时,链接器才会因找不到fcn()的实现而报错。 - 编译器自动生成的默认构造函数可正常工作:Base类没有自定义构造函数,编译器会自动生成一个默认构造函数,这个构造函数是空实现,不需要依赖任何未定义的成员函数,因此能正常完成对象初始化。
内容的提问来源于stack exchange,提问作者yapkm01
相关产品推荐
相关产品推荐

