C++中类的静态、常量、引用成员变量的初始化
创始人
2025-05-31 23:43:29

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;
};

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

相关内容

热门资讯

黄芪泡酒的正确方法:避开勾兑酒... 最近总有人问我黄芪泡酒的正确做法,作为一个爱折腾泡酒的人,我得好好聊聊这个话题。之前踩过最大的坑就是...
光瓶酒“裸奔”逆袭:撕掉包装,... 白酒销售额连续下跌,光瓶酒却以“无盒革命”逆势突围,理性消费观念成为主流,不仅是包装形式的简化,也带...
原创 炸... 首先,我们要明确一点:炸带鱼时,淀粉和面粉虽然都能起到增稠的作用,但它们的性质和用途有所不同。淀粉是...
聊聊美食文化如何塑造我们及面临... 在诸多地域文化里头,美食文化属于那种特别能逾越语言阻碍、直接抵达人心的一种存在。它不单单只是烹饪技艺...
羊肚菌虾滑蒸蛋:鲜到骨子里的家... 在快节奏的生活里,谁不想用一碗鲜掉眉毛的蒸蛋,抚慰疲惫的味蕾?今天要分享的羊肚菌虾滑蒸蛋,堪称家常蒸...