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

时间:2020-09-16 04:05:16

标签: c++11 lambda conditional-operator

我只是在探索lambda表达式,并尝试使用它从使用C ++三元运算符的函数返回。但是,以下代码无法正常工作!

这是该程序的简化版本,用于解释我的实际问题,因此,请仅使用lambda而不是return(x + y + offset)来发布答案。

在成员函数'int Calculator :: add(int,int)'中:12:26:错误:否 匹配三元'operator?:'(操作数类型为'bool','int'和 'Calculator :: add(int,int):: ')16:3:警告:控制 到达非空函数[-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));
    }

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

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

您需要实际调用lambda:

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

或者没有lambda:

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

答案 1 :(得分:0)

我在做什么错了?

三元表达式的真/假部分不兼容。您不能将-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 ^^