gpt4 book ai didi

C++ lambda 的三元赋值

转载 作者:行者123 更新时间:2023-12-02 00:12:17 25 4
gpt4 key购买 nike

知道为什么以下代码片段无法编译吗?它提示错误“错误:操作数?:具有不同的类型”

  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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com