2

我可以用 auto 声明 ObjC 块吗?

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

我无法为此制定出有效的语法。

4

3 回答 3

4

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

于 2013-03-10T03:20:48.020 回答
0

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

于 2013-02-06T06:20:34.970 回答
0

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

至于为您的示例声明块变量,以下将在 Objective-C 中工作

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

fun(5);

有关块的更多声明选项,这里有一个很好的答案

于 2013-01-15T16:31:38.950 回答