在 C 编码领域,“ ”运算符的行为应用于 lambda ('[]{}') 激发了好奇心。虽然代码看起来非常规,但令人惊讶的是,它可以使用主要编译器成功编译。但是这个异常是如何工作的呢?
理解这种行为的关键在于 ' ' 运算符的重载。当应用于 lambda 时,“ ”会触发到普通旧函数指针的转换。这是可能的,因为所讨论的 lambda 是非捕获的,这意味着它不引用任何外部变量。
根据 C 标准(第 5.1.2 节),非捕获 lambda 闭包对象具有返回函数指针的公共非虚拟转换函数。该指针指向一个与 lambda 具有相同行为的函数。
“ ”运算符具有内置重载,可将任何类型转换为指针。在 lambda 的情况下,选择前面提到的转换函数作为候选重载。结果是与 lambda 的函数调用运算符具有相同参数和返回类型的函数指针。
因此,当 ' ' 应用于第一个 lambda 时,它将 lambda 闭包对象转换为函数指针。这使得可以将第二个 lambda 闭包对象分配给同一个函数指针,因为两个 lambda 具有兼容的类型。
是的,使用“[]{}”的代码是符合标准。 C 标准允许将非捕获 lambda 闭包对象转换为函数指针。这种行为可以实现一些令人惊讶但有效的编码技巧。
以上是C 中的 ' ' 运算符如何与非捕获 Lambda 一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!