何时宣布班级成员

时间:2012-01-26 03:27:13

标签: c++

据Bjarne Stroustrup说:

  

如果(并且仅当)您在远处使用初始化成员,要求将其存储为内存中的对象,则该成员必须(唯一)在某处定义。初始化程序可能不会重复。

C ++编程语言,第3版,第10.4.6.1节)

他给出了这个例子:

class curious{  
     public:  
     static const int c1=7;  
     //..
};  
const int curious::c1;  //necessary

那么为什么有必要定义一个static成员,因为我们可能根本没有初始化它?

此外,const和引用成员未在任何地方声明,即使有必要对它们进行初始化(没有默认构造函数)。

1 个答案:

答案 0 :(得分:3)

如果不以需要将c1存储在内存中的方式使用c1(例如获取地址等),则编译器可以将7的所有用法替换为值{ {1}}。但是,如果你以某种方式使用它,它需要存储在某个地方,那么你必须提供一个定义,以便它存在于某个编译单元中。

成员变量未在任何地方声明,因为它们在创建时存在于对象内部;每个成员变量都存在于创建的对象中。 static变量存在于任何对象实例之外(即,无论该类是否被实例化,静态变量都存在),因此它们需要某个地方(有时)独立于特定实例。