用auto声明块

时间:2013-01-15 13:14:52

标签: c++ objective-c c++11 clang objective-c-blocks

我可以用auto?

声明ObjC块
auto fun = ^(int x) { NSLog(@"%d", x); }
fun(5);

我无法找到有效的语法。

3 个答案:

答案 0 :(得分:4)

;声明后,你遗漏了fun。否则,您的语法正确,Clang将在-std=c++11 -fblocks模式下接受C ++或Objective-C ++输入。 (注意,块实际上是一个正交扩展,它不是Objective-C的一部分。)

答案 1 :(得分:0)

我不认为C ++ / Objective-C ++中的auto关键字在objective-C中使用。

至于为您的示例声明块变量,以下内容将在objective-C

中起作用
void(^fun)(int x) = ^(int x) {
NSLog(@"%d",x);
};

fun(5);

对于阻止的更多声明选项,有一个非常好的答案here

答案 2 :(得分:0)

auto关键字是c ++ 11关键字。 Objective-c是c而不是c ++的超集,因此不包含c ++的属性,而是c。至于objective-c ++,我不认为clang是所有新的c ++ 11特性的最新版本,特别是在构建objective-c ++的编译器中。希望这有帮助!