一个对象要么执行默认初始化,要么执行值初始化。如果对象有初值,那么执行值初始化;若没有初值则执行默认初始化。根据默认初始化的类型和位置,有两种情况:
-
内置类型。局部作用域,不初始化;全局、静态变量初始化为0。
-
类类型。默认初始化将会调用默认构造函数完成其初始化过程。如STL中的vector将会默认初始化为空容器;string将会默认初始化为空字符串。
类的默认初始化是否有“有效值”依赖于默认构造函数是否将每个数据成员都有默认初值,或在默认构造函数中执行赋值。为了避免这一可能导致的出错,Effective C++条款四中提到,应该为每个数据成员都进行默认初始化(无论是通过默认初值还是初始化列表),虽然在默认构造函数体内能够通过赋值达到同样的效果,但是作者还是建议我们使用前者,因为效率更高。
[1] C++定义了一套包括算术类型(Arithmetic type)和空类型(void)在内的基本数据类型,也叫做基本内置类型。算术类型它包括:bool
char
wchar_t
char16_t
char32_t
short
int
long
long long
float
double
long double
。