C++类中非静态数据成员的声明是否同时属于定义?
关于C++类成员中声明与定义的区分
首先得给你点个赞,你对声明(declaration)和定义(definition)的核心理解完全到位——所有定义都是声明,但并非所有声明都是定义,这个逻辑是C++里区分这两个概念的核心准则。
针对你提出的核心问题:类定义里的int x;属于非定义的声明,而非定义。原因很直接:类中的非静态数据成员只是告诉编译器「这个类有一个名为x的int类型成员」,但并不会为它分配实际的存储空间;只有当你创建该类的对象(比如CustomType obj;)时,这个成员才会获得存储空间,此时才完成了它的定义。
对应C++标准的规定出处
在C++标准的**[basic.def](声明与定义)**章节中,明确了定义的本质:
定义是一种声明,它为实体分配存储空间,或者为函数/函数模板提供完整的实现。
而针对类成员的细节,在**[class.mem](类成员)**章节中进一步说明:
类中的非静态数据成员声明并不构成该成员的定义,其存储空间的分配(即定义的完成)发生在类的实例化过程中(也就是对象被创建时)。
再梳理你给出的示例,帮你巩固认知
int x;:既是声明也是定义(编译器为x分配了全局/局部存储空间)extern int y;:仅为声明,未分配存储空间,因此不是定义class CustomType { int x; };:此处的int x;是类成员的声明,不分配存储空间,不属于定义int p[10];:既是声明也是定义(为数组分配了对应大小的存储空间)
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

