看板 C_and_CPP 關於我們 聯絡資訊
剛看到這種寫法 class A { public: A(){ func(0); } ~A() { cout << "I am a Destructor! " << endl; } void func(int data) { printf("A1: %d\n", data); } }; int main() { A().func(1); return 0; } -----Output----- A1: 0 A1: 1 覺得挺神奇的 因為沒看過 不用把A instantiate(實體化)出來也可以呼叫constructor和member function 有什麼教材有提到這個東西的嗎? 課本都沒有這樣寫.... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.4.181
james732:A() 這個動作已經實體化了 11/08 15:56
可以請問實體化的物件名是? 就叫A() 嗎?
diabloevagto:那種是rvalue嗎? 11/08 17:09
※ 編輯: k0783154 來自: 140.112.4.181 (11/08 17:20) 我剛發現這樣的實體生命週期只有一行 A(); A().func(1); ---Output--- A1: 0 I am a Destructor! A1: 0 A1: 1 I am a Destructor! 不知道這種用法 有什麼應用呢?! ※ 編輯: k0783154 來自: 140.112.4.181 (11/08 17:38)
x000032001:看你物件怎麼寫阿@@ 怎麼應用...string好像能用到? 11/08 18:39
angleevil:這種用法有一個名稱,只是我忘記了.但是它屬於暫時物件 11/08 21:04
angleevil:而且c++標準規範有限制它的使用.不過我不太懂標準規範 11/08 21:05
akasan:google "c++ temporary object" 前幾個搜索結果還不錯 11/08 21:24
k0783154:感謝你們 11/08 23:25
LPH66:話說我最近發現這種寫法的一個用途: 11/08 23:33
LPH66:stringstream(some_c_string) >> some_variable; 11/08 23:34
LPH66:在不想重新引入 cstdio 的情況下這能當做 sscanf 的取代法 11/08 23:34
LPH66:又可以使用到 C++ >> 型式輸入的一些好處 11/08 23:35
LPH66:而且還不佔變數名 XD 11/08 23:35
LPH66:sprintf 也能用類似的方法改寫 不過由於 << 的回傳型態問題 11/08 23:37
LPH66:需要手動做 dynamic_cast 就是了... 11/08 23:37
angleevil:他的名稱不是temporary object.只是他有這個性質而已 11/09 09:23