Re: [問題] return type 加上 && 是什麼阿?

看板C_and_CPP作者 (朴髮箍)時間14年前 (2011/03/28 20:53), 編輯推噓2(201)
留言3則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《QQ29 (我愛阿蓉)》之銘言: : 最近灌2010 開個C++專案 : 有看到某投影片在講 c++0x 雖然 我也不知道那到底是甚麼 只是想測試他寫個 : int && Foo(); 我不知道到底是幹嘛的 : 測試碼如下 : #include <iostream> : using namespace std; : int Func(){int q = 7788; return q; } 在這邊, 建立一個暫時物件(用來回傳), 並傳入q作為copy ctor的 引數, 你可以看看他們的位址會不一樣: 程式碼 http://codepad.org/hZXGszDZ 輸出 http://ppt.cc/2zvs : int && Foo() : { : //int *ptr = new int(5566); : return Func(); : } Foo 這個函式所做的事情不多, 它只是把Func回傳的暫時物件再轉 送出去: 程式碼 http://codepad.org/OF4Z3BZp 輸出 http://ppt.cc/uSAQ : int main() : { : cout<<Foo(); : return 0; : } : 以這樣看來 : 我不是就return一個local variable的ref了嗎? 是 ref to temporary, gcc 會送你一個警告訊息: [Warning] returning reference to temporary 為了消除這個警告, 你可以使用 std::forward() 明確把 rvalue 的特性轉發出去. : 這compile會過 但我無法體會他的用途 : 感覺也不是個正確用法... 它的目的在於儘量的減少資源浪費, 搭配move語意可以重複使用已 經配置的記憶體等..比較大、或是不允許複製的物件, 帶來的好處 會比較明顯, 像是 fstream. : 而且最近使用C# 看到這c++0x簡介 : 感覺他根本就要融合C#了阿 有需求才有進步阿, 並不是抄來抄去的 : 甚麼auto (C#就是var吧) 有許多函式會回傳一個Functor, 該Functor模塑了某種概念, 而實 作的型態卻各異, 為了使用你不需要去背這些零零總總的, 所以才 有 auto 的產生, 例如你想把 lambda function當成物件來重複使 用: auto f = []( int a, int b ) -> int { return a + b; }; assert( f( 1, 2 ) == 3 ); 也可以和ptr_fun作一個結合: auto f = ptr_fun( strcmp ); assert( f( "apple", "orange" ) == -1 ); 我想應該很少人知道ptr_fun回傳的型態為何, 更何況是 bind1st、 bind2nd了... : 甚麼 lambda....(C#也有) : 這是為啥? C#不是MS的產物嗎? 還是說C++也因為MS而做了些好用的改變? : 還是 這只是VC10的 特有種c++0x版本..... : 謝謝 原 po可以維基一下C++0x, 看看簡短的介紹. 你可以學得多, 但至 少要精一種... - 另外推文中有板友提到的 Boost.Lambda, 它是借由placeholder加 上各種重載版的運算子, 再回傳Functor(型態未知)來實作的. - -- ◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去 ████◢█████s ~> T-ara ███ █ ◢██ 歡迎您的光臨 ███████████恩靜智妍孝敏 ███ ██ 素妍居麗寶藍 ████◥██◤ █████花英 ψmakigoto123 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115

03/28 21:07, , 1F
好期待C++0x普及後 有了lambda, auto, rvalue 更方便靈活
03/28 21:07, 1F

03/29 00:45, , 2F
真的期待C++0x.....可是要等多久(崩潰)
03/29 00:45, 2F
※ 編輯: loveme00835 來自: 140.121.197.115 (03/29 02:45)

03/29 12:12, , 3F
C++0x final draft上星期剛通過了,今年應該可以成正式標準
03/29 12:12, 3F
文章代碼(AID): #1Da8JNEM (C_and_CPP)
文章代碼(AID): #1Da8JNEM (C_and_CPP)