知道为什么以下代码片段无法编译吗?它提示错误“错误:操作数?:具有不同的类型”
auto lambda1 = [&](T& arg) {
...
};
auto lambda2 = [&](T& arg) {
...
};
auto lambda = condition ? lambda1 : lambda2;
最佳答案
奇怪的是,如果 lambda 是无捕获的,则可以使用运算符 +
技巧:
auto lambda1 = [](int arg) { ... };
auto lambda2 = [](int arg) { ... };
auto lambda = condition ? +lambda1 : +lambda2; // This compiles!
lambda(2019);
这是可行的,因为 +
会将 lambda 转换为函数指针,并且两个函数指针具有相同的类型(类似于 void (*)(int)
)。
使用 GCC 和 Clang(但不使用 MSVC),可以省略 +
,lambda 仍会转换为函数指针。
关于C++ lambda 的三元赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58735308/