C++中的默认初始化
?
c++中涉及到內(nèi)置類型、復(fù)合類型、STL對象、結(jié)構(gòu)體、類等對象,初始化也有很多類型:默認(rèn)初始化、拷貝初始化、直接初始化。
默認(rèn)初始化是指未指定變量具體值時,變量自動被初始化。默認(rèn)初始化存在很多差異,分類總結(jié)對于熟練掌握及應(yīng)用大有裨益!
1.內(nèi)置類型
默認(rèn)初始值由定義的位置決定,若不在任何塊內(nèi),初始化為0,否則未定義,或者說是擁有一個不確定的值。
#include<iostream>
using namespace std;
int oi;
double od;
bool ob;
int main(){
??? cout<<oi<<endl<<od<<endl<<ob<<endl;
??? int ii;
??? double id;
??? bool ib;
??? cout<<ii<<endl<<id<<endl<<ib<<endl;
??? 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.復(fù)合類型
a.引用,聲明時必須初始化,而且無法將引用重新綁定到另一個對象上。
b.指針,未定義。
3.STL對象
視情況而定,一般為空對象,例如 string str,則str是一個空字符串。
4.結(jié)構(gòu)體和類
在初始化問題上,二者并無區(qū)別,故僅考慮結(jié)構(gòu)體!
若我們自己沒有定義構(gòu)造函數(shù),編譯器會自動創(chuàng)建合成的默認(rèn)構(gòu)造函數(shù),而一旦自己定義了,編譯器就不會自動創(chuàng)建。
所以如果自己定義了構(gòu)造函數(shù),最好再定義一個默認(rèn)構(gòu)造函數(shù)。
默認(rèn)構(gòu)造函數(shù),若函數(shù)初始值列表或者默認(rèn)參數(shù)值提供了默認(rèn)值,成員變量將被初始化為相應(yīng)的值,否則會被初始化為相應(yīng)的默認(rèn)值。
合成的默認(rèn)構(gòu)造函數(shù)有兩個問題:
- 對于內(nèi)置類型或復(fù)合類型的變量,可能會初始化為未定義
- 對于該結(jié)構(gòu)體包含自定義類型作為成員變量,如果該自定義類型無默認(rèn)的構(gòu)造函數(shù),將無法默認(rèn)初始化。
————————————————
版權(quán)聲明:本文為CSDN博主「wangkingkingking」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wangkingkingking/article/details/79346527
總結(jié)
以上是生活随笔為你收集整理的C++中的默认初始化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nmap和Zenmap详解
- 下一篇: C++ 内置或者复合类型 成员,必须自己