預設初始化,顧名思義,即為在定義變數時如果沒有為其指定初始化值,則該變數會被c++編譯器賦予預設的值。而變數被賦予的預設值到底是什麼,則取決於變數的資料型別和變數的定義位置。
規則1:內建型別的變數如果初始化,則它的預設初始化值取決於定義它的位置:
• 定義在任何函式之外的未初始化的內建型別變數(也就是全域性變數)會被預設初始化為0
1 #include2•定義在函式體內部的(包括main函式)未初始化的內建型別變數(也就是區域性變數)的預設初始值是未定義的(也就是乙個隨機數)。如果試圖拷貝或以其他方式訪問該變數的值,此時會引發編譯錯誤using
namespace
std;
3intn;4
doubled;5
intmain()
規則2:未初始化的內建型別的全域性變數的預設初始化值還取決於變數的資料型別:
•數值資料型別的未初始化全域性變數的預設初始值為0
•bool型別的未初始化的全域性變數的預設初始化值為false(也就是0)
1 #include2•char型別的未初始化的全域性變數的預設初始化值為『\0』(ascii碼值為0)using
namespace
std;
3bool
flag;
4int
main()
1 #include2•string型別(姑且當成內建型別)的未初始化的全域性變數的預設初始值為「」using
namespace
std;
3charc;4
intmain()
8else
11 system("
pause");
12return0;
13 }
1 #include2 #include規則3:靜態變數無論是全域性變數還是區域性變數,編譯器都會給其預設初始化值,值為多少取決於變數的資料型別3using
namespace
std;
4string
str;
5int
main()
9else
if(str=="")
12else
15 system("
pause");
16return0;
17 }
1 #include2規則4:指標型別的全域性未初始化的變數的預設初始值為null,而指標型別的區域性未初始化變數的預設值這是未定義的(在有些編譯器下定義為初始化的區域性指標變數會報錯)using
namespace
std;
3static
intvalue1;
4int
main()
1 #include2ps:建議對所有的變數在其定義的時候就對其進行初始化,這樣可以避免許多無意的錯誤using
namespace
std;
3int*ptr;
4int
main()
9else
12if (local_ptr ==null)
15else
18return0;
19 }
C 預設初始化
如果定義變數時沒有指定初始值,則變數被預設初始化,此時變數被賦予了預設值,預設值到底是什麼由變數型別和位置決定。函式體外初始化為0,函式體內不被初始化,使用new初始化的值是隨機的。int g value intmain void 定義乙個類變數但沒有指定初始值時,會使用預設建構函式來初始化,所以沒...
預設初始化
雖然保險的做法是對每個變數都顯示初始化,但是了解一下預設初始化的規則也是很有必要的。1.定義於任何函式體之外的變數被初始化為0。2.定義在函式體內部的區域性變數不會被預設初始化。所以,它的值是未定義的 這裡的 未定義 我的理解 變數所分配記憶體中的二進位制資料,分配時是什麼就是什麼,機器會按照變數的...
初始化 1 預設初始化 列表初始化
初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...