C++语言可以将声明和定义分开。
初始化
当一个对象被创建的同时获得了特定的值成为对象的初始化。
默认初始化:定义变量时没有指定初值,则变量会被默认初始化,编译器会给一个默认值,该默认值由数据类型和定义的位置决定。
如内置类型变量在定义时没有显式初始化,变量在函数体外会被默认初始化为0;在函数体内部不会被初始化,也即未进行定义,该对象的创建是失败的,如果引用该对象或指针指向该对象会引发错误。
显式初始化:定义变量时给定初值。
声明
声明规定了变量的名字和类型;
变量和函数都有声明和定义,在使用前必须进行声明。声明告诉编译器类型和名字,不负责开辟存储空间,存储地址需要编译器去找。
变量或函数可以被声明多次,但通常只能进行一次定义。
extern关键字标识的才是声明,其余都是定义。
内置类型的声明将自动成为定义,因为编译器知道为其分配多少空间。枚举和类的声明也会自动成为定义。
定义
定义除了规定变量的名字和类型,还申请了空间,也可以为变量赋初值。
定义的同时也进行了声明,并开辟了存储空间。
任何加上显式初始化式子的声明都是变量的定义,包括extern关键字,extern int a = 1;
这时extern的作用就消失了,变量a被定义。且extern声明位于函数外部时,才可以含有初始化式,在函数内部初始化会报错。
一个变量没有被初始化是未进行定义的。