Re: [問題] return type 加上 && 是什麼阿?
※ 引述《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
03/28 21:07, 1F
推
03/29 00:45, , 2F
03/29 00:45, 2F
※ 編輯: loveme00835 來自: 140.121.197.115 (03/29 02:45)
→
03/29 12:12, , 3F
03/29 12:12, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):