iOS   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在Xcode [c]中定义lambda(assert.h)中的lambda时,为类似函数的宏调用编译错误提供了太多参数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我正在使用assert.h中的断言宏 我已经定义了lambda来执行断言检查. int val1 = 0; int val2 = 1; const auto check = [val1,val2]()-> bool { return val1 < val2; }; // no error for this call assert(check() && "Test is failed");
我正在使用assert.h中的断言宏
我已经定义了lambda来执行断言检查.

int val1 = 0;
int val2 = 1;

const auto check = [val1,val2]()-> bool
{
    return val1 < val2;
};
// no error for this call
assert(check() && "Test is Failed");

// no error for this call
assert([=]()-> bool
       {
           return val1 < val2;
       }() && "Test is Failed");

为什么我要来

当我使用assert宏并在捕获列表中定义带有多个参数的lambda时,编译错误

解决方法

问题是捕获列表中的逗号.

预处理器对C语法的理解非常有限,它主要进行简单的文本替换.如果逗号不在匹配的内括号之间(当然不是字符串文字的一部分),则预处理器会将其视为宏调用的参数的分隔符.

所以预处理器认为你用两个参数调用assert [this和第一个逗号后面的其余东西,这会产生错误.

您可以使用一组额外的括号来修复此错误

int i = -7,j = 7;
assert(([i,j](){return i + j;}()));

对于标准爱好者:

N4140中的16.3 / 11,强调我的.

大佬总结

以上是大佬教程为你收集整理的在Xcode [c]中定义lambda(assert.h)中的lambda时,为类似函数的宏调用编译错误提供了太多参数全部内容,希望文章能够帮你解决在Xcode [c]中定义lambda(assert.h)中的lambda时,为类似函数的宏调用编译错误提供了太多参数所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。