作者cateran (雲川閒步)
看板C_and_CPP
標題[問題] Leetcode上看到的語法
時間Sun Feb 5 04:03:16 2017
在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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1486238600.A.95D.html
1F:推 LPH66: 你是要問 function<int(TreeNode *)> 還是 [&] ? 02/05 04:21
2F:→ LPH66: 前者就只是普通的 std::function 的宣告 02/05 04:21
3F:→ LPH66: 後者叫做 lambda expression 02/05 04:21
5F:→ cateran: get it 謝啦 02/05 04:31
6F:推 chchwy: lambda, C++11的新東西 02/05 07:28
7F:推 steve1012: Lambda 超好用 02/05 09:06
8F:推 soheadsome: 前面應該省略成auto 02/05 12:14
9F:推 LPH66: 技術上省略成 auto 跟寫 function<> 是不一樣的 02/05 16:04
10F:→ LPH66: 一個最明顯的差別是你不寫成 function<> 02/05 16:04
11F:→ LPH66: 就不能在這個 lambda 裡參照「外面」的自己名字來做遞迴 02/05 16:05
12F:→ LPH66: 因為在那時 auto 還沒確定是什麼, 但 function<> 是確定的 02/05 16:06
13F:→ LPH66: 這裡的例子就是為了做遞迴所以必須寫出 function<> 來 02/05 16:06
14F:→ LPH66: 不過如果不做遞迴的話, 因為 lambda 的使用情境裡包括很多 02/05 16:08
15F:→ LPH66: 僅此一次的使用, 那麼既然不需要有名字就沒差了 02/05 16:09