初始化全局函数内的静态成员

Initialization of a static member inside a global function

本文关键字:静态成员 函数 全局 初始化      更新时间:2023-10-16

我的代码如下:

class myClass{
    public:
        static int a;
};
void myFunc()
{
    int myClass::a = 1;
}

我看到以下编译错误错误C2655:"myClass::a":定义或重新声明在当前作用域中非法

我做了以下改变,一切都很好。知道吗?

class myClass{
    public:
        static int a;
};
int myClass::a = 1;
void myFunc()
{
}

逻辑思考如下:

如果从未调用myFunc(),则不会定义myClass::a。因此,它必须在全球范围内。

在您的第一个代码片段中,即使没有定义myClass::a,也可能使用它,因此它是不允许的,并且以前的语法是无效的C++

静态变量必须在程序启动前初始化,因此如果在函数中初始化它,则可能根本不会初始化它。因此编译器应该将其视为错误。静态变量是在编译时(程序运行之前(分配的。希望得到帮助。

如果在函数中定义静态成员数据,则它的链接是函数内部的。它们所需的联系是全球性的。