所以,我刚刚升级到 Xcode 4.4,我在更新日志中注意到:
Apple LLVM 编译器支持其他 C++11 功能,包括 lambda
太棒了!所以我开始编码,我发现了一些事情:
Lambda 可分配给 Objective-C 块:
void (^block)() = []() -> void { NSLog(@"Inside Lambda called as block!"); }; block();
std::function
可以容纳一个 Objective-C 块:std::function<void(void)> func = ^{ NSLog(@"Block inside std::function"); }; func();
我们不能将 Objective-C 块分配给 lambda:
auto lambda = []() -> { NSLog(@"Lambda!"); }; lambda = ^{ // error! NSLog(@"Block!"); }; lambda();
为什么是这样?鉴于我们在上面看到的,这两者在语义上不应该是等价的吗?