C++ lambda 的三元赋值

标签 c++ c++11 lambda conditional-operator

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

  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/

相关文章:

c# - 如何检查 lambda 表达式中的日期是否为空,并仅在为空时才使用今天的日期

C++如何解析这个字符串

c++ - 在 C++ 中连接到 MySQL

c++11 - cuda cpu 函数 - gpu 内核重叠

c++ - 使用 emplace_hint 判断一个项目是否被添加

powershell - Powershell 中的 Lambda 表达式

C++ LINUX 获取所有机器连接的域名

c++ - 多线程日志打印先验 C++

c++ - 如何将时间转换为纪元时间?

java - 增强的 'for' 循环和 lambda 表达式