我可以用 auto 声明 ObjC 块吗?
auto fun = ^(int x) { NSLog(@"%d", x); }
fun(5);
我无法为此制定出有效的语法。
我可以用 auto 声明 ObjC 块吗?
auto fun = ^(int x) { NSLog(@"%d", x); }
fun(5);
我无法为此制定出有效的语法。
您;
在fun
. 否则,你的语法是正确的,Clang 将在-std=c++11 -fblocks
模式下接受它,用于 C++ 或 Objective-C++ 输入。(请注意,块实际上是一个正交扩展,它不是 Objective-C 的一部分。)
auto 关键字是 c++11 关键字。Objective-c 是 c 而不是 c++ 的超集,因此不包含 c++ 的属性,而是包含 c。至于objective-c++,我不认为clang 在所有新的c++11 特性上都是最新的,尤其是在构建objective-c++ 的编译器中。希望这可以帮助!
我不认为 C++/Objective-C++ 中的 auto 关键字在 Objective-C 中使用。
至于为您的示例声明块变量,以下将在 Objective-C 中工作
void(^fun)(int x) = ^(int x) {
NSLog(@"%d",x);
};
fun(5);
有关块的更多声明选项,这里有一个很好的答案