如何解决从函数返回lambda表达式的返回值有什么意义?
自C ++ 17 it is possible开始在constexpr
函数中使用lambda表达式。
在相关文档Wording for constexpr lambda中显示了此代码示例:
constexpr int AddEleven(int n) { return [n] { return n + 11; }(); }
这仅仅是一个展示语言功能的玩具示例,还是实际使用案例,该代码与以下代码具有不同的行为?
constexpr int AddEleven(int n) {
return n + 11;
}
在这种情况下使用lambda表达式有什么好处?
解决方法
在这种情况下使用lambda表达式有什么好处?
没有好处。
它的作用非常简单明了,其目的是成为 valid 代码示例。几乎没有人需要一个程序将“ Hello World”输出到控制台,但是示例代码中有数百种用法。
,立即调用的lambda可用于在表达式中提供语句友好的范围,通常以比构造函数参数允许的更复杂的方式初始化const
变量:
auto const v = [&] {
std::vector<int> v;
// do some stuff
for(/*...*/)
v.push_back(/*...*/);
return v;
}();
return
语句必须已经出现在作用域中,因此将其与上述模式结合不会有太大的好处。但是,我可以想象它曾经用来澄清需要这种初始化的提前条件:
if(/* some corner case */)
return [&] {
std::vector<int> v;
// do some stuff
for(/*...*/)
v.push_back(/*...*/);
return v;
}();
...相比:
if(/* some corner case */) {
std::vector<int> v;
// do some stuff
for(/*...*/)
v.push_back(/*...*/);
return v;
}
... return
远离条件的地方。
This code demonstrates a feature of c++ that a lamda can be made constexpr. Which is not possible before c++17.
This code will not work before c++17.
#include <iostream>
constexpr int Increment(int value) {
return [value] { return value + 1; }();
};
int main()
{
Increment(10);
static_assert(11 == Increment(10),"Increment does not work correctly");
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。