c 變數初始化規則有哪些?

時間 2021-06-12 23:52:36

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...