作者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/cn.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