c++中的初始化方式很多,主要包括預設初始化,直接初始化,拷貝初始化,值初始化等,很多人被這些初始化方式搞得暈頭轉向,經過一番學習,將自己的認識和大家分享。
首先,預設初始化與其他初始化不同,其沒有用於初始化的確定值,但有時其實未定義的,有時是空(或0)。理解預設初始化主要根據初始化物件的型別:
(1)內建型別。內建型別的預設初始化取決於其是靜態的還是動態的,全域性變數,static,類static成員等都是靜態變數,其預設初始化為空或0,棧或堆上的內建變數預設初始化都是未定義的,例如函式內區域性變數,動態分配時未顯式初始化內建型別。
int a; a 為0,
void f()
a未定義。
int *p=new int;p指向未定義。
int *p=new int(10);p指向10。
(2)類型別,類型別的預設初始化只取決於其預設建構函式。如果沒有預設建構函式則編譯器合成預設建構函式,合成的預設建構函式首先利用類內初始值初始化資料成員,如果沒有類內初始值,則對資料(內建)進行預設初始化,那麼將產生未定義的資料成員。
其次,拷貝初始化化和直接初始化的區別在於,對於有確定初始值的,通過「=」初始化的是拷貝初始化,否則是直接初始化。
int a(10);
int b=a;
最後,值初始化是直接初始化的一種,其指出了初始化的數量。
vectorv(10,1)
c vector初始化總結
對c primer上面vector的常用用法做歸納總結。4種初始化vector的方式 1 vectorv1 vector儲存型別為t的物件。預設建構函式,v1為空。2 vectorv2 v1 v2是v1的乙個副本。3 vectorv3 n,i v3包含n個值為i的元素。4 vectorv4 n v4...
C 直接初始化和複製初始化
在c 裡,物件初始化是乙個非常重要但又容易令人混淆的問題。這裡是自己的一些總結。一。初始化與賦值的含義 初始化 包括建立 或說定義 物件並且賦給初值。如果乙個物件只被建立而沒有被初始化,則該變數只能用於被賦值 賦值 擦除物件的當前值並用新值代替。二。內建型別 一 直接初始化 1.空初始化 即無引數無...
c 直接初始化與拷貝初始化
我們常見的幾種初始化的形式 string str1 first 拷貝初始化,編譯器允許把這句話改寫為string str first 但是string類必須有public的拷貝 移動 建構函式 string str2 10,a 直接初始化 string str3 str2 直接初始化 string ...