据Bjarne Stroustrup说:
如果(并且仅当)您在远处使用初始化成员,要求将其存储为内存中的对象,则该成员必须(唯一)在某处定义。初始化程序可能不会重复。
( C ++编程语言,第3版,第10.4.6.1节)
他给出了这个例子:
class curious{
public:
static const int c1=7;
//..
};
const int curious::c1; //necessary
那么为什么有必要定义一个static
成员,因为我们可能根本没有初始化它?
此外,const
和引用成员未在任何地方声明,即使有必要对它们进行初始化(没有默认构造函数)。
答案 0 :(得分:3)
如果不以需要将c1
存储在内存中的方式使用c1
(例如获取地址等),则编译器可以将7
的所有用法替换为值{ {1}}。但是,如果你以某种方式使用它,它需要存储在某个地方,那么你必须提供一个定义,以便它存在于某个编译单元中。
成员变量未在任何地方声明,因为它们在创建时存在于对象内部;每个成员变量都存在于创建的对象中。 static
变量存在于任何对象实例之外(即,无论该类是否被实例化,静态变量都存在),因此它们需要某个地方(有时)独立于特定实例。