在Stack Overflow问题中,在C++ 11中不允许重新定义lambda,为什么?,给出了一个不编译的小程序:
int main() {
auto test = []{};
test = []{};
}
Run Code Online (Sandbox Code Playgroud)
问题得到了回答,一切似乎都很好.然后是Johannes Schaub并做了一个有趣的观察:
如果你
+在第一个lambda之前放置一个,它会神奇地开始工作.
所以我很好奇:为什么以下工作呢?
int main() {
auto test = +[]{}; // Note the unary operator + before the lambda
test = []{};
}
Run Code Online (Sandbox Code Playgroud)
为标题道歉,如果我知道如何更好地表达它,那么谷歌可能已经帮助了我......
我想要一个对象 Y,它代表容器 X 的视图,这样当我迭代 Y 时,它是 X 的向前或向后迭代。我想在不复制数据的情况下进行,因此新ranges库出现记在心里。
std::vector x{};
auto z = some_condition ? x : (x | std::views::reverse);
Run Code Online (Sandbox Code Playgroud)
显然,x和的类型(x|...)是不同的。我怎样才能使它们一致?
编辑:刚刚发现10 年前提出的以下问题,我想我想知道的是,ranges现在让事情变得更容易了吗?由于该解决方案仍然需要将 for 循环逻辑放入单独的函数或 lambda 中。