在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"); // 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,强调我的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |