变量的"声明,定义"以及"初始化"
想要彻底理解这一部分的内容,你应该对OS/进程/虚拟内存/编译/链接过程有一定的了解,仅从语言层次学习是比较抽象的.
声明和定义
- 从编译的角度看:
- 仅声明某个变量,那么就只创建了Symbol,这个Symbol对应的存储空间需要在后续的链接过程中resolve.
- 定义某个变量,在创建Symbol的同时,编译器为其分配了存储空间, 这个存储空间可以被链接器reslove道引用这个Symbol的地方.
- 对开发者而言:
- 如果你希望使用某个已经存在的对象,那么就应该使用声明语句.
- 每个定义语句都有"声明"的效果,不存在只定义不声明的语句.
- 就C++而言,若语句仅有
extern
,且不含任何初始化部分,则该语句就是一个纯粹的声明,例如extern T &val;//纯声明
extern T val;//纯声明
extern