C++中类的静态、常量、引用成员变量的初始化

1、类的静态成员变量,必须在类外再声明一次

这是因为类内的声明只是描述了类的成员变量和成员函数的类型,而不为它们分配内存空间,因此需要在类外声明一次静态成员变量以分配内存空间。
例如,假设有一个类定义如下:

class MyClass 
{
    
    
public:
	  static int myStaticVar;
};

则需要在类外定义静态成员变量myStaticVar:

	int MyClass::myStaticVar;

这样,myStaticVar 就被分配了内存空间。注意,定义时不能使用static关键字,否则会导致编译错误。当然最好是在声明的时候直接赋予初值

	int MyClass::myStaticVar = 0;

否则没有赋予初值的话,一般还要定义一个静态成员函数Init()来做初始化

例如,假设有一个类定义如下:

class MyClass {
    
    
public:
  static int myStaticVar;
  void init() {
    
    
    myStaticVar = 42;
  }
};
int MyClass::myStaticVar;

但是需要注意的是,静态成员变量只能被初始化一次,因此需要确保在整个程序中只有一次初始化。

2、类的常量或引用成员变量只能在初始化列表中初始化

正确做法如下

class MyClass {
    
    
public:
  MyClass(int value1, int& value2): myConstVar(value1), myRefVar(value2) {
    
    
    // myConstVar = value;  // error: assignment of read-only member 'MyClass::myConstVar'
  }

private:
  const int myConstVar;
  int& myRefVar;
};

如果尝试在构造函数内部进行初始化会报错

猜你喜欢

转载自blog.csdn.net/Motarookie/article/details/129687111