2013-01-15 47 views
2

我可以用auto自動聲明ObjC塊嗎?用自動聲明塊

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

我找不出有效的語法。

+3

我懷疑**如果它工作,它只能用於Objective-C++,因爲'auto'意味着C 。 – trojanfoe

+0

顯然,在C++ 0x中有不同的含義,其中以前的C++規範使用C中的'auto'(這只是默認的存儲類型)。除非這個問題的原因超出範圍,否則我會鼓勵在這種情況下不要使用'auto',而更喜歡'int(^ fun)(int)='。 (作爲Objective-C開發人員,我從未使用過'auto',並且可能需要向我的所有同事解釋它。) – wjl

回答

4

您在申報fun後缺少;。否則,你的語法是正確的,Clang將接受-std=c++11 -fblocks模式下的C++或Objective-C++輸入。 (請注意,塊實際上是一個正交的擴展,它不是Objective-C的一部分)。

0

我不認爲在Objective-C中使用C++/Objective-C++的auto關鍵字。

至於聲明塊變量爲你的榜樣下面將在Objective-C

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

fun(5); 

工作更聲明期權塊有一個很好的答案here

0

自動關鍵字是一個C + +11關鍵字。 Objective-c是c和C++的超集,因此它不包含C++的屬性,而是c。至於objective-C++,我不認爲clang是所有新的C++ 11功能的最新版本,特別是在構建objective-C++的編譯器中。希望這可以幫助!

+2

Objective-C是一組擴展,可以添加到C或C++中。 Clang有一個非常全面的C++ 11實現(僅缺少一些功能),同樣的編譯器用於C++和Objective-C++。 –