C++中int与lambda相加报二元表达式操作数无效该如何解决
错误原因
C++中lambda表达式本身是一个可调用的匿名类对象,你代码中仅完成了lambda的定义,没有执行调用操作,因此+=运算符右侧的操作数是lambda类型对象,和左侧的int类型无法匹配,自然触发类型不匹配的报错。注:该报错实际是编译阶段的类型检查错误,不是运行时错误。
解决方法
在lambda定义的末尾添加一对括号()触发调用,即可拿到lambda返回的int值参与累加运算。
修正后的代码如下:
// 注意:局部变量定义时要初始化,否则未初始化的int值是随机垃圾值,累加属于未定义行为 int maxDistance = 0; maxDistance += [&](){ auto it = itStr1->begin()+5; string pNum{}; while(*it != ']') { pNum += *it; it++; } return stoi(pNum); }(); // 末尾加()完成lambda调用
额外注意事项
- 要确保
itStr1指向的字符串长度不小于6,否则begin()+5会出现越界访问 - 要确保目标字符串从第6位开始一定存在
]字符,否则while循环会无限遍历导致内存越界
内容的提问来源于stack exchange,提问作者makaw
相关产品推荐
相关产品推荐

