为什么编译器不为内部声明的变量分配内存?

Kam*_*que -2 c c++

当我们在C/C++ 内部class或struct在C/C++中声明一些变量时,我们必须为变量创建一个class或struct为其分配内存的对象.

为什么我们不能在没有任何对象的情况下访问这些变量

AnT*_*AnT 5

嗯,答案是真的:因为这是这种语言特征的重点.类的数据成员的想法是它是类对象的组成部分.它与整个阶级对象一起开始它的生命,它结束了它的生命.

如果您有两个类对象,则您有两组完全独立的数据成员.如果您有50个类对象,则您有50个完全独立的数据成员集.如果您没有类对象,则没有要访问的数据成员集.换句话说,如果没有类对象,则无法访问这些"变量",因为它们在没有类对象的情况下不存在.

当您在类定义中声明类的数据成员时,您并不是真正"声明变量".类定义只是描述了类类型的布局.它本身不产生物理,即注意到它将存在于数据存储器中,注意到你可以物理访问.

同时,C++语言有这样的概念作为类的静态成员.类的静态数据成员不与特定的类对象相关联.它们独立存在.事实上,静态数据成员只是普通的全局变量,由相当薄的C++层覆盖 - 特定的"语法糖"(更复杂的命名,访问控制等).类的静态数据成员可以作为普通变量访问,没有任何宾语.

换句话说,这不是"为什么?"的问题.而是一个你需要什么的问题.如果需要非静态数据成员功能,请使用非静态数据成员.如果你想要静态数据成员功能......那么,你就明白了.