C++中类的静态变量初始化,为什么包括数据类型

Static Variable initialisation for Classes in C++, why include data type?

本文关键字:为什么 包括 数据类型 初始化 变量 静态 C++      更新时间:2023-10-16

我一直在学习C++,我遇到了静态变量(我有C89的先验知识),在我使用的资源中,他们在类中声明了一个静态变量,例如:

class nameHere
{
    public:
        static int totalNum;
}
int nameHere::totalNum = 0;
int main()
{}

例如。我不明白的是,既然我已经在类定义中声明了静态变量是整数,为什么我还需要在类定义之外将其声明为整数?这样简单地初始化它是否没有意义:

nameHere::totalNum = 0;
int main()
{}

C++有什么特殊的原因或者仅仅是一个约定吗?谢谢你的帮助!

这(可能)会使语言更难解析(而且解析起来已经非常困难了)。

实际上,数据类型(intlongmy_class,等等)告诉编译器它所看到的是一个声明的开始(在本例中,这也是一个定义)。如果没有这一点,编译器将很难对事物进行排序。

在全局范围的特定情况下,情况不会那么糟糕,因为在全局范围内,你所能拥有的只是一系列声明。然而,在任何其他范围内,事情都会更加困难(在全球范围内制定一条规则,在其他地方制定另一条规则确实会很糟糕)。

C++11中,您可以简单地初始化类内的变量:

class nameHere
{
    public:
        static const int totalNum = {0};
}

定义和声明之间有区别。虽然类中的静态变量已经声明,但尚未定义。一个定义规则,解释声明和定义,并说明

在任何翻译单元中,模板、类型、函数或对象只能有一个定义。其中一些可以有任意数量的声明。

因此,在声明变量时必须使用对象的完整类型。