Re: [問題] lambda capture list 的問題

看板C_and_CPP作者 (小嫩)時間9年前 (2016/12/13 10:39), 9年前編輯推噓0(009)
留言9則, 3人參與, 最新討論串4/4 (看更多)
http://ideone.com/9vpyRD 又發現VC行為比較不一樣的地方了... 這個寫法VC不給過 為什麼他會希望建構子一定要提供const &版本copy constructor的呢? 我capture的物件也不是const屬性的... 真是奇怪.... ps. 剛剛又發現 //template<class T> //Holder(T&&) //{ //cout << __FUNCSIG__ << this << endl; //} 這段如果註解拿掉, 把Holder(Holder&)給刪除 VC還是不會想走進去這template版本的建構子, 我不確定規則寫了template版本的copy constructor, compiler會不會default產生 Holder(const Holder&) 不過看來VC會, GCC不會 真怪 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.9.25.16 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1481596741.A.47A.html ※ 編輯: dreamboat66 (39.9.25.16), 12/13/2016 10:39:23

12/13 11:55, , 1F
你傳暫存物件,要用 const 去接呀
12/13 11:55, 1F

12/13 12:52, , 2F
請問哪一段有產生暫存物件呢? 如果有 那是VC比較嚴
12/13 12:52, 2F
※ 編輯: dreamboat66 (39.9.25.16), 12/13/2016 12:56:00

12/13 13:34, , 3F
少打幾個字,如果你要拷貝暫存物件,一定要 const
12/13 13:34, 3F

12/13 13:35, , 4F
或許VC會這樣做限制,手上沒編譯器可測
12/13 13:35, 4F

12/13 14:37, , 5F
但這case 並沒有temp obj的出現呀?
12/13 14:37, 5F

12/13 21:35, , 6F
我猜是因為如果用Holder(Holder&),lambda內仍然可以
12/13 21:35, 6F

12/13 21:35, , 7F
改變被copy的object(這樣就變成reference了)
12/13 21:35, 7F

12/13 21:35, , 8F
但是它要的是一個不會影響被copy的object的"copy"
12/13 21:35, 8F

12/13 21:48, , 9F
另外,關於template的部分,的確是VC有問題
12/13 21:48, 9F
文章代碼(AID): #1OJrz5Hw (C_and_CPP)
文章代碼(AID): #1OJrz5Hw (C_and_CPP)