[問題] 不用產生物件呼叫member function

看板C_and_CPP作者 ( )時間14年前 (2011/11/08 15:30), 編輯推噓1(1014)
留言15則, 7人參與, 最新討論串1/1
剛看到這種寫法 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

11/08 15:56, , 1F
A() 這個動作已經實體化了
11/08 15:56, 1F
可以請問實體化的物件名是? 就叫A() 嗎?

11/08 17:09, , 2F
那種是rvalue嗎?
11/08 17:09, 2F
※ 編輯: 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)

11/08 18:39, , 3F
看你物件怎麼寫阿@@ 怎麼應用...string好像能用到?
11/08 18:39, 3F

11/08 21:04, , 4F
這種用法有一個名稱,只是我忘記了.但是它屬於暫時物件
11/08 21:04, 4F

11/08 21:05, , 5F
而且c++標準規範有限制它的使用.不過我不太懂標準規範
11/08 21:05, 5F

11/08 21:24, , 6F
google "c++ temporary object" 前幾個搜索結果還不錯
11/08 21:24, 6F

11/08 23:25, , 7F
感謝你們
11/08 23:25, 7F

11/08 23:33, , 8F
話說我最近發現這種寫法的一個用途:
11/08 23:33, 8F

11/08 23:34, , 9F
stringstream(some_c_string) >> some_variable;
11/08 23:34, 9F

11/08 23:34, , 10F
在不想重新引入 cstdio 的情況下這能當做 sscanf 的取代法
11/08 23:34, 10F

11/08 23:35, , 11F
又可以使用到 C++ >> 型式輸入的一些好處
11/08 23:35, 11F

11/08 23:35, , 12F
而且還不佔變數名 XD
11/08 23:35, 12F

11/08 23:37, , 13F
sprintf 也能用類似的方法改寫 不過由於 << 的回傳型態問題
11/08 23:37, 13F

11/08 23:37, , 14F
需要手動做 dynamic_cast 就是了...
11/08 23:37, 14F

11/09 09:23, , 15F
他的名稱不是temporary object.只是他有這個性質而已
11/09 09:23, 15F
文章代碼(AID): #1EkDgPbR (C_and_CPP)