1樓:
樓上都好厲害,我只想到了 `std::initializer_list`
#include
#include
template
T>struct ListNode };template T>class LinkList LinkList (const std:: initializer_list )head =preHead ->next ;delete preHead;} virtual ~LinkList()} void print ()const std:: cout < endl;} ListNode intmain(); link_list .print ();} 2樓:大鈾子 本來想用委託建構函式的,後來想想,用摺疊表示式說不定會更好? #include using namespace std; template T>class MyList };int main(); for( autox: myList.l )return0; }解釋一下,使用{}初始化時,如果不存在接收initializerlist的建構函式時,就會找乙個能與大括號中內容逐個匹配的建構函式。這裡編譯器會呼叫變長引數模板的建構函式。其中是C++17的摺疊表示式,意思是將變長引數f的每乙個,依次呼叫l. push_back方法。 --------2019/03/28更新--------委託建構函式的也寫了乙個。 #include using namespace std; template T>class MyList template ...F >MyList(T t,F...f) :MyList(f ...) };int main(); for( autox: myList.l )return0;} 3樓: 傳陣列或者std::vector是正解。非要傳入可變引數的話,我來給題主指一條明路(逃)。 template T>struct link_list };template Arg, typename ...Args >link_list (Arg ,Args ...) ->link_list 4樓:d41d8c 寫乙個建構函式模板,接受引數為T(&&)[N]。 雖然醜了點,但可以支援移動語義,不像initializer_list只支援const訪問所以只能從初始化列表複製構造。 template struct link_list ; 餘葉 其實就兩個構造器。乙個是靜態的,乙個是普通的。靜態構造器得需要你第一次訪問到該類的時候會被觸發。建立的時候,包括 static 成員變數的初始化和static構造器,其實 static 成員變數會整合進static構造器裡面的。而普通成員變數也會整合進普通構造器裡面的。 天煞 如 Sai說的,... 針對C 11,簡單地說,我認為可以分為下面兩條 使用auto關鍵字的初始化 auto i 1 這樣的,注意的地方就是用了auto就不要用 不要寫成auto i。這兩個是不一樣的,具體請參考initializer list這個東西。不使用auto關鍵字,使用 的初始化。int i 這樣。不要用auto... 蛋蛋的蛋 int a 1000 補充一下,類似的方式可以讓前500個元素等於1,後500個等於0,手機打字,不方便,有心人自己嘗試吧, 向晨 c標準庫有個limits.h的標頭檔案,裡面有你所使用機器的int char等型別變數的位元組長度和大小限制相關的巨集,可以用這些巨集來知道乙個int對應幾個...C 類本身的初始化和靜態欄位的初始化到底發生在什麼時候?
c 變數初始化規則有哪些?
C語言 關於C裡面陣列批量初始化