1樓:
針對C++11,簡單地說,我認為可以分為下面兩條:
使用auto關鍵字的初始化:auto i = 1; 這樣的,注意的地方就是用了auto就不要用{},不要寫成auto i。這兩個是不一樣的,具體請參考initializer_list這個東西。
不使用auto關鍵字,使用{}的初始化。int i;這樣。不要用auto i。
總之就是不要把auto和{}一起用。
{}初始化的好處就是避免了narrow conversion。
另外,需要注意一點是。
vector v{};這裡呼叫的是預設建構函式。
vector v;這裡呼叫的是引數為initializer_list的建構函式。
也就是說:
if either a default constructor or an initializer-list constructor could be invoked, prefer the default constructor.
if both an initializer-list constructor and an "ordinary constructor" could be invoked, prefer the initializer-list constructor.
所以說,vector v(1) 和 vector v是不一樣的。
另外,VS2013的C++編譯器在做類建構函式的初始化列表時是用不了{}的,它預設把這個{}當成()處理,所以無法處理執行上述的disambiguation,這是個bug。
C 類本身的初始化和靜態欄位的初始化到底發生在什麼時候?
餘葉 其實就兩個構造器。乙個是靜態的,乙個是普通的。靜態構造器得需要你第一次訪問到該類的時候會被觸發。建立的時候,包括 static 成員變數的初始化和static構造器,其實 static 成員變數會整合進static構造器裡面的。而普通成員變數也會整合進普通構造器裡面的。 天煞 如 Sai說的,...
C語言 關於C裡面陣列批量初始化
蛋蛋的蛋 int a 1000 補充一下,類似的方式可以讓前500個元素等於1,後500個等於0,手機打字,不方便,有心人自己嘗試吧, 向晨 c標準庫有個limits.h的標頭檔案,裡面有你所使用機器的int char等型別變數的位元組長度和大小限制相關的巨集,可以用這些巨集來知道乙個int對應幾個...
c 鍊錶如何用 進行初始化?
樓上都好厲害,我只想到了 std initializer list include include template T struct ListNode template T class LinkList LinkList const std initializer list list head p...