我一直在学习C ++,而且我遇到了静态变量(我从C89获得了先验知识),并且在我正在使用的资源中,他们在类中声明了一个静态变量,例如:
class nameHere
{
public:
static int totalNum;
}
int nameHere::totalNum = 0;
int main()
{}
例如。
我不明白的是,因为我已经声明静态变量是类定义中的整数,为什么我还需要将它声明为类定义之外的整数?
简单地初始化就没有意义了:
nameHere::totalNum = 0;
int main()
{}
是否有特定的原因或仅仅是C ++的约定?
感谢您的帮助!
这可能(可能)使语言更难以解析(并且无论如何已经几乎非常难以解析)。
实际上,数据类型(int
, long
, my_class
,无论如何)告诉编译器它所看到的是声明的开头(在这种情况下,它也是一个定义)。如果没有这个,编译器就会有更困难的时间来解决问题。
在全球范围内的特定情况下,它不会那么糟糕,因为在全球范围内,您可以拥有的是一系列声明。然而,在任何其他范围内,事情会更加困难(并且在全球范围内有一条规则,而另一条规则确实是丑陋的)。
在 C ++ 11 你可以简单地初始化类中的变量:
class nameHere
{
public:
static const int totalNum = {0};
}
定义和声明之间存在差异。
虽然已声明类中的静态变量,但尚未定义。该 一个定义规则,解释声明,定义和陈述
在任何翻译单元中,模板,类型,函数或对象只能有一个定义。其中一些可以有任意数量的声明。
因此,在声明变量时必须使用完整类型的对象。