我正在学习 C++。只是好奇,只能从类声明中为静态和常量变量赋值吗?这主要是为什么当您为普通成员分配值时,他们有一种特殊的方式来做到这一点
void myClass::Init() : member1(0), member2(1)
{
}
我正在学习 C++。只是好奇,只能从类声明中为静态和常量变量赋值吗?这主要是为什么当您为普通成员分配值时,他们有一种特殊的方式来做到这一点
void myClass::Init() : member1(0), member2(1)
{
}
这看起来应该是一个构造函数;如果是,它应该没有返回类型,并且它需要与类具有相同的名称,例如,
myClass::myClass()
: member1(0), member2(1)
{
}
只有构造函数可以有初始化列表;您不能将这种类型的初始化委托给Init
函数。
任何非静态成员都可以在构造函数初始化列表中初始化。所有 const 和 reference 成员必须在构造函数初始化列表中初始化。
在所有条件相同的情况下,您通常应该更喜欢在构造函数初始化列表中初始化所有成员,而不是在构造函数的主体中(有时使用初始化列表是不可能的或者很笨拙,在这种情况下,您应该显然,不要使用它)。
静态类成员不属于任何特定对象。静态成员在该类的所有对象之间共享。因此,您不会在构造函数中初始化它们——例如,这会过于频繁地重新初始化它们。
现在有一个问题,为什么只能在类本身中初始化静态const类成员。原因是该类最有可能在标题中,并且该标题包含在多个翻译单元中。这会导致编译器出现问题。它应该将实际初始化放在哪个翻译单元(即,在哪个目标文件中)?但是对于简单的 const 来说,这并不重要。int const TWO = 2;
不需要在翻译单元中进行实际初始化,编译器只需记住它。