11

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

class nameHere
{
    public:
        static int totalNum;
}

int nameHere::totalNum = 0;

int main()
{}

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

nameHere::totalNum = 0;

int main()
{}

是否有特殊原因或仅仅是 C++ 的约定?感谢所有的帮助!

4

3 回答 3

7

这(可能)会使该语言更加难以解析(而且无论如何解析已经非常困难了)。

实际上,数据类型(int, long, my_class, 不管)告诉编译器它所看到的是声明的开始(在这种情况下,它也是一个定义)。没有它,编译器将很难整理出一些东西。

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

于 2013-07-17T08:03:46.260 回答
3

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

class nameHere
{
    public:
        static const int totalNum = {0};
}
于 2013-07-17T08:08:48.477 回答
2

定义和声明是有区别的。虽然已声明类中的静态变量,但尚未定义它。单一定义规则,解释声明和定义和状态

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

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

于 2013-07-17T08:03:36.077 回答