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