[問題] Leetcode上看到的語法

看板C_and_CPP作者 (雲川閒步)時間8年前 (2017/02/04 20:03), 編輯推噓5(5010)
留言15則, 5人參與, 最新討論串1/1
在leetcode上看到一段dfs的function宣告在解題的member function內部 請前輩解釋一下 function<int(TreeNode *)> dfs = [&] (TreeNode *x) { if (!x) { return 0; } int sum = x->val; sum += dfs(x->left); sum += dfs(x->right); return sum; }; 搜尋function template看起來也不太像 不知道有沒有關鍵字可以google到語法syntax 謝謝囉 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 208.54.5.238 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1486238600.A.95D.html

02/05 04:21, , 1F
你是要問 function<int(TreeNode *)> 還是 [&] ?
02/05 04:21, 1F

02/05 04:21, , 2F
前者就只是普通的 std::function 的宣告
02/05 04:21, 2F

02/05 04:21, , 3F
後者叫做 lambda expression
02/05 04:21, 3F

02/05 04:31, , 5F
get it 謝啦
02/05 04:31, 5F

02/05 07:28, , 6F
lambda, C++11的新東西
02/05 07:28, 6F

02/05 09:06, , 7F
Lambda 超好用
02/05 09:06, 7F

02/05 12:14, , 8F
前面應該省略成auto
02/05 12:14, 8F

02/05 16:04, , 9F
技術上省略成 auto 跟寫 function<> 是不一樣的
02/05 16:04, 9F

02/05 16:04, , 10F
一個最明顯的差別是你不寫成 function<>
02/05 16:04, 10F

02/05 16:05, , 11F
就不能在這個 lambda 裡參照「外面」的自己名字來做遞迴
02/05 16:05, 11F

02/05 16:06, , 12F
因為在那時 auto 還沒確定是什麼, 但 function<> 是確定的
02/05 16:06, 12F

02/05 16:06, , 13F
這裡的例子就是為了做遞迴所以必須寫出 function<> 來
02/05 16:06, 13F

02/05 16:08, , 14F
不過如果不做遞迴的話, 因為 lambda 的使用情境裡包括很多
02/05 16:08, 14F

02/05 16:09, , 15F
僅此一次的使用, 那麼既然不需要有名字就沒差了
02/05 16:09, 15F
文章代碼(AID): #1ObZE8bT (C_and_CPP)