指定 lambda 函数作为默认参数
如何将 lambda 指定为默认参数?我想这样做:
int foo(int i, std::function<int(int)> f = [](int x) -> int { return x / 2; })
{
return f(i);
}
但我的编译器(Mac OS X 上的 g++ 4.6)抱怨:
error: local variable 'x' may not appear in this context
编辑: 事实上,这是一个编译器错误。上面的代码可以在最新版本的 gcc (4.7-20120225) 上正常工作。
How do I assign a lambda as default argument? I would like to do this:
int foo(int i, std::function<int(int)> f = [](int x) -> int { return x / 2; })
{
return f(i);
}
but my compiler (g++ 4.6 on Mac OS X) complains:
error: local variable 'x' may not appear in this context
EDIT:
Indeed, this was a compiler bug. The above code works fine with a recent version of gcc (4.7-20120225).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用重载:
You could use overloading:
这似乎是 gcc 中的一个错误;只要没有捕获任何内容,该标准就允许在默认参数中使用 lambda 表达式。
以下似乎是 FDIS 关于默认参数中的 lambda 的所有内容,因此默认情况下应该允许除此处禁止的之外的任何使用。
This seems to be a bug in gcc; the standard permits lambda expressions in default parameters as long as nothing is captured.
The following seems to be everything the FDIS says about lambdas in default parameters, so any use other than what is forbidden here ought to be permitted by default.