cpp中static 成员变量的内存既不是在声明类时分配,也不是在创建对象时分配,而是在(类外)初始化时分配。反过来说,没有在类外初始化的 static 成员变量不能使用。这是为什么?
时间: 2024-03-31 19:37:30 浏览: 13
C++中的 static 成员变量有以下特点:
1. 它们是属于类的,而不是属于对象的。也就是说,所有该类的对象共享同一个 static 成员变量。
2. 为了确保 static 成员变量只有一个实例存在,必须在类外进行定义。
3. 如果没有在类外对 static 成员变量进行初始化,则该变量的值将为0或默认值,具体取决于它的类型。
4. static 成员变量的初始化必须在类外进行,因为在类定义中无法为 static 成员变量分配内存。
因此,如果没有在类外对 static 成员变量进行初始化,那么它将没有分配内存,不能使用。这也是为什么在使用 static 成员变量时必须在类外进行初始化的原因。
相关问题
cpp中静态成员函数和静态成员变量类似,需要在声明时要加 static,在定义时不能加 static。为什么在类外定义的时候不加static?
在类外定义静态成员函数和静态成员变量时,不需要再次指定 static 关键字,是因为这些成员已经在类定义中声明为静态成员。静态成员是属于整个类的,而不是某个对象的,因此在定义时不需要再次加上 static 关键字,而是需要在类定义中声明它们为静态成员。在类外定义时,可以通过类名加作用域运算符来访问静态成员。
在类声明中定义了静态成员变量,在哪做
在类声明中定义了静态成员变量后,需要在类外进行初始化,一般在对应的源文件中进行初始化。例如,如果在类声明中定义了静态成员变量 `int MyClass::static_var`,则可以在对应的源文件 `MyClass.cpp` 中进行初始化,例如 `int MyClass::static_var = 0;`。这样,在使用该静态成员变量时,就可以直接通过类名和作用域解析符来访问,例如 `MyClass::static_var`。