在阅读LLVM静态分析器文档之一时,我偶然发现了 strange 运算符。
^{ int y = x; }();
我知道我可以在{...}之类的函数中定义一个嵌套块,但是我们甚至可以调用吗?另外,我从未见过将 ^ 放在大括号块前面的任何用法。我以为这是GCC支持的一种语言扩展,并用匿名函数或 lambda 这样的关键字在Google上进行了搜索,但没有用。有谁对此有任何想法吗?
答案 0 :(得分:9)
来自Clang 9 Documentation Language Specification for Blocks,它是一个 Block Literal Expression 。它的格式为(来自wiki):
^return_type ( parameters ) { function_body }
但是:
如果省略了返回类型,并且参数列表为(void),则也可以省略(void)参数列表。
以下内容:
^{ int y = x; }();
等于:
( ^void (void) { int y = x; } )();
等于:
void (^f)(void) = ^void (void) { int y = x; };
f();
它声明执行int y = x
并且在声明executes之后立即执行的块文字。