一、首先提出,在c++中雖然初始化和賦值都是用=進行操作,但是初始化和賦值是兩個完全不同的操作。
!!!初始化的含義是建立乙個物件是賦予其乙個初始值,而賦值的含義是把物件的當前值擦除,用乙個新值去替代。
int a = 0;
int b = ;
int c;
int d(0);
上面的語句分別把a、b、c、d初始話為0;前兩種是拷貝初始化,後兩種是直接初始化,而其中值得提出的是中間使用花括號的兩種,這兩種初始化方式被稱為列表初始化,列表初始化有乙個重要特點,就是如果我們使用列表初始化的方式去初始化且初始值存在丟失資訊的風險,則編譯器將報錯。
int a = ;//初始值存在丟失資訊的風險
兩個錯誤。
int c = 3.14;//而非列表初始化則是可以的
int d(3.14);//自動執行轉換
二、如果定義物件是沒有指定初始值,則物件被預設初始化,此時物件的預設值的由物件型別和其被定義的位置所決定。
1.如果是內建型別的物件未被顯示初始化,則它的初始值由其位置決定。定義於任何函式體之外的物件(即全域性變數)被初始化為0,而且可對該物件直接操作;而定義在函式體內的物件將不被初始化,乙個未被初始化的內建型別物件的值是未定義的,而如果試圖訪問此類值將引發錯誤。
2.如果是類型別,則其初始化物件的方式由其各自決定。
tip
C 物件初始化
形式 new t object 值初始化形式 new t object 預設初始化形式 new t object 二者區別 只要使用了括號 圓括號或花括號 就是值初始化。可以簡單理解為括號提醒編譯器你想要用某個值賦給物件。沒有使用括號,就是預設初始化。可以簡單理解成,你不加任何東西,編譯器就會使用預...
物件初始化
在oc中使用alloc後,會分配到一塊記憶體塊,同時這塊記憶體塊會被清零,所以初始化函式init是不需要再做置零的操作的。在oc中,應該在alloc後就呼叫初始化函式init,使用new可以達到這個效果,但new不是oc的風格。物件在init時,應該先使用其父類的init,然後再使用自己的init行...
物件初始化
我們知道當使用new關鍵字建立乙個物件的時候,會呼叫相應的建構函式對該物件進行初始化,那麼這個過程中到底都還有什麼事情呢?先看一段 當執行語句 student stu new student zhangsan 17 執行該語句的時候在記憶體中程式都做了什麼事情,讓我們一一枚舉出來 1 因為new用到...