如何理解声明和定义
我们经常说的判断语句,如“它是一只猫”,其实包含着“它存在”这一前提。我理解的“声明”是为了说明“它存在”,而“定义”是为了说明“它是什么”。
为什么要区分声明和定义
这与程序的编译运行过程有关。编译过程更关心“是否被声明”,而链接,运行过程更关心“是否被定义”。比如我说“请给我拿杯水”,服务员首先考虑“世界上确实存在水”,再考虑“在哪儿可以得到水”。假如“请给我拿杯水”是程序指令,那编译过程只关心“是否已声明水,水是否存在”,而链接,运行过程则关心“是否定义了水,水在哪儿”。
为什么静态成员变量类内声明,类外定义
想起“白马非马”的故事,世界上只有具体的“白马”,“黑马”,不存在抽象的“马”。
前提1:对程序而言,运行中只有具体的对象,而没有抽象的类。具体的对象需要内存,需要地址,需要被定义;抽象的类不需要内存,不需要地址,不需要被定义只需要被声明。
前提2:类中有一种神奇的成员,静态成员,它是脱离对象的,所以不可能通过对象被定义,但它又是类中的一员,只跟随类被声明过。
结论:静态成员未被定义过,需要手动在类外定义。
思考
感觉是为了维护“抽象的类只需要被声明”这一“理想”,牺牲程序员,手动在类外定义静态变量,失去了实用性。猜测后续会为了实用性而放弃这个无用的理想吧。