C++中的默认初始化

 

c++中涉及到内置类型、复合类型、STL对象、结构体、类等对象,初始化也有很多类型:默认初始化、拷贝初始化、直接初始化。

默认初始化是指未指定变量具体值时,变量自动被初始化。默认初始化存在很多差异,分类总结对于熟练掌握及应用大有裨益!
1.内置类型
默认初始值由定义的位置决定,若不在任何块内,初始化为0,否则未定义,或者说是拥有一个不确定的值。

#include
using namespace std;
int oi;
double od;
bool ob;
int main(){
    cout<     int ii;
    double id;
    bool ib;
    cout<     return 0;
}

output:
0
0
0
1570130464
6.95322e-310
0

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

2.复合类型
a.引用,声明时必须初始化,而且无法将引用重新绑定到另一个对象上。
b.指针,未定义。

3.STL对象
视情况而定,一般为空对象,例如 string str,则str是一个空字符串。

4.结构体和类
在初始化问题上,二者并无区别,故仅考虑结构体!
若我们自己没有定义构造函数,编译器会自动创建合成的默认构造函数,而一旦自己定义了,编译器就不会自动创建。
所以如果自己定义了构造函数,最好再定义一个默认构造函数。
默认构造函数,若函数初始值列表或者默认参数值提供了默认值,成员变量将被初始化为相应的值,否则会被初始化为相应的默认值。
合成的默认构造函数有两个问题:
- 对于内置类型或复合类型的变量,可能会初始化为未定义
- 对于该结构体包含自定义类型作为成员变量,如果该自定义类型无默认的构造函数,将无法默认初始化。
————————————————
版权声明:本文为CSDN博主「wangkingkingking」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wangkingkingking/article/details/79346527

你可能感兴趣的:(c++)