值初始化:
(1)在陣列初始化的過程中,如果提供的初始值數量少於陣列的大小,剩下的元素會進行值初始化;
(2)靜態static變數、定義在塊作用域外的全域性變數,如果沒有顯式的初始值,將執行值初始化;
(3)當我們通過書寫形如t()的表示式(例如 int())顯式地請求值初始化時;
預設初始化:
(1)當我們在塊作用域內(類內也屬於塊作用域內)不使用任何初始值定義乙個非靜態變數時;
(2)當乙個類本身含有類型別成員且使用合成的預設建構函式時;
(3)當類型別的成員沒有在建構函式初始值列表中顯式地初始化時;
宣告:在環境/上下文中指定乙個變數的名字。也就是說,宣告僅僅是讓編譯器知道,而沒有實際分配空間。
初始化:給乙個宣告後尚未初始化的變數乙個有意義的初始值。
賦值 : 銷毀乙個變數原來的值,並賦予乙個新值。相當於改變了乙個變數的狀態
二、初始化是在宣告乙個變數的同時賦予它乙個值,而賦值是已經宣告過了變數,後續再對它進行賦值操作。對於內建型別:
//在乙個塊作用域內
三、對於定義了自己的建構函式的類型別(例如string)來說,不管採用預設初始化還是值初始化,物件都會通過預設建構函式來初始化。但對於內建型別,值初始化的內建型別物件有著良好定義的值,而預設初始化的物件的值則是未定義的。對於類中那些依賴於編譯器合成的預設建構函式的內建型別成員,如果他們未在類內被初始化,那麼它們的值也是未定義的。
string *ps1 = newstring; //
預設初始化為空string
string *ps2 = new
string(); //
值初始化為空string
int *pi1 = new
int; //
預設初始化;*pi1的值未定義
int *pi2 = new
int(); //
值初始化為0;*pi2為0
class
x x() = default;};
intmain()
四、定義於塊作用域內(類內也屬於塊作用域內)的內建型別變數將不被初始化,其值未定義;定義於塊作用域外的全域性變數被值初始化為0。靜態static變數如果沒有顯式的初始值,它將執行值初始化。
classx x() = default;};
intmain()
五、對於自定義型別和stl中的容器,
classa;a a=a(); //
值初始化
std::vector vec1; //
預設初始化,呼叫預設建構函式
乙個類物件進行預設初始化和值初始化,必須要有相應的預設建構函式。否則將會報錯,因為無法構造這個類。
宣告:在環境/上下文中指定乙個變數的名字。也就是說,宣告僅僅是讓編譯器知道,而沒有實際分配空間。
初始化:給乙個宣告後尚未初始化的變數乙個有意義的初始值。
賦值 : 銷毀乙個變數原來的值,並賦予乙個新值。相當於改變了乙個變數的狀態
二、初始化是在宣告乙個變數的同時賦予它乙個值,而賦值是已經宣告過了變數,後續再對它進行賦值操作。對於內建型別:
//在乙個塊作用域內
三、對於定義了自己的建構函式的類型別(例如string)來說,不管採用預設初始化還是值初始化,物件都會通過預設建構函式來初始化。但對於內建型別,值初始化的內建型別物件有著良好定義的值,而預設初始化的物件的值則是未定義的。對於類中那些依賴於編譯器合成的預設建構函式的內建型別成員,如果他們未在類內被初始化,那麼它們的值也是未定義的。
string *ps1 = newstring; //
預設初始化為空string
string *ps2 = new
string(); //
值初始化為空string
int *pi1 = new
int; //
預設初始化;*pi1的值未定義
int *pi2 = new
int(); //
值初始化為0;*pi2為0
class
x x() = default;};
intmain()
四、定義於塊作用域內(類內也屬於塊作用域內)的內建型別變數將不被初始化,其值未定義;定義於塊作用域外的全域性變數被值初始化為0。靜態static變數如果沒有顯式的初始值,它將執行值初始化。
classx x() = default;};
intmain()
五、對於自定義型別和stl中的容器,
classa;a a=a(); //
值初始化
std::vector vec1; //
預設初始化,呼叫預設建構函式
乙個類物件進行預設初始化和值初始化,必須要有相應的預設建構函式。否則將會報錯,因為無法構造這個類。
值初始化和預設初始化
引用 1 值初始化 顧名思義,就是用數值初始化變數。如果沒有給定乙個初始值,就會根據變數或類物件的型別提供乙個初始值。對於int型別其值初始化後的值為0。對於預設初始化內建型別變數來說 1 定義在函式體之外的變數是全域性變數,一般儲存在全域性區,儲存在全域性區的變數一般會執行值初始化。此時,其初始值...
值初始化和預設初始化的區別
如果使用等號 初始化乙個變數,實際上執行的是拷貝初始化,編譯器把等號右側的初始值拷貝到新建立的物件中去。與之相反,如果不使用等號,則執行的是直接初始化。當初始值只有乙個時,使用直接初始化或拷貝初始化都行。如果用多個值進行初始化的情況,非要用拷貝初始化的方式處理也不是不可以,不過需要顯式地建立乙個 臨...
初始化 1 預設初始化 列表初始化
初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...