首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lambda表达式在C++三元操作符中的应用:错误类型失配

问lambda表达式在C++三元操作符中的应用:错误类型失配
EN

Stack Overflow用户
提问于 2020-09-16 04:05:16
回答 2查看 141关注 0票数 0

我只是探索lambda表达式,并尝试使用它从函数返回使用C++三元操作符。但是,下面的代码不能与错误一起工作!

这是一个简化的程序版本,用来解释我的实际问题,所以请只使用lambda,而不只是返回(x+y+offset)。

成员函数'int::添加(int,int)':12:26:

:不匹配三元‘操作符?:’(操作数类型为'bool','int',和'Calculator::add(int,int)::

代码语言:javascript
复制
    #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));
    }

我在这里做错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-16 04:13:03

您的三元操作符尝试返回-1或lambda,它们没有公共类型。

你得给兰达打个电话:

代码语言:javascript
复制
return !initalized ? -1 : [this, x, y]()
      {
          return ((x+y) + offset);
      }(); // <= added () 

或者没有灯笼:

代码语言:javascript
复制
return !initalized ? -1 : x+y+offset;
票数 2
EN

Stack Overflow用户

发布于 2020-09-16 04:09:00

,我在这里做错了什么?

三元表达式的真假部分不兼容。不能将-1转换为lambda表达式,也不能将lambda表达式转换为int。

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

代码语言:javascript
复制
return !initalized ? -1 : (x + y + this->offset);

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

代码语言:javascript
复制
return !initalized ? -1 : [this, x, y]() { return ((x+y) + this->offset); }();
//                                                                 missing ^^
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63912955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档