在 C++ 三元运算符中使用 lambda 表达式:错误类型不匹配

Use of lambda expression in C++ ternary operator : error type mismatch

我只是在探索 lambda 表达式,并尝试将其用于 return 来自使用 C++ 三元运算符的函数。但是,下面的代码无法正常工作!

这是程序的简化版本,非常友好地解释了我的实际问题post 仅使用 lambda 回答,而不仅仅是 return (x+y+offset) .

In member function 'int Calculator::add(int, int)': 12:26: error: no match for ternary 'operator?:' (operand types are 'bool', 'int', and 'Calculator::add(int, int)::<lambda()>') 16:3: warning: control reaches end of non-void function [-Wreturn-type]

    #include <iostream>
    #include <string>
    
    class Calculator
    {
      public:
      bool initalized = false;
      int offset = 0;
      
      int add(int x, int y)
      {
          return !initalized ? -1 : [this, x, y]()
          {
              return ((x+y) + offset);
          };
      }
    };
    
    int main()
    {
        Calculator c;
        c.initalized = true;
        c.offset = 1;
    
        printf("%d", c.add(2,10));
    }

我做错了什么?

What am I doing wrong here?

三元表达式的 true/false 部分不兼容。您不能将 -1 转换为 lambda 表达式,也不能将 lambda 表达式转换为 int.

我不清楚你想用 lambda 表达式做什么,但它可以是:

return !initalized ? -1 : (x + y + this->offset);

如果出于某种原因需要使用 lambda 表达式,则必须调用 lambda 表达式。

return !initalized ? -1 : [this, x, y]() { return ((x+y) + this->offset); }();
//                                                                 missing ^^

您的三元运算符尝试 return -1 或 lambda,它们没有通用类型。

您需要实际调用 lambda:

return !initalized ? -1 : [this, x, y]()
      {
          return ((x+y) + offset);
      }(); // <= added () 

或者没有 lambda:

return !initalized ? -1 : x+y+offset;