Итак, я только что обновился до Xcode 4.4 и заметил в журнале изменений:
Apple LLVM compiler supports additional C++11 features, including lambdas
Это здорово! Итак, я занялся кодированием и кое-что выяснил :
. Лямбда-выражения назначаются блокам Objective -C:
void (^block)() = []() -> void {
NSLog(@"Inside Lambda called as block!");
};
block();
std::function
может содержать цель -блок C:
std::function<void(void)> func = ^{
NSLog(@"Block inside std::function");
};
func();
Мы не можем назначить блок Objective -C лямбде:
auto lambda = []() -> {
NSLog(@"Lambda!");
};
lambda = ^{ // error!
NSLog(@"Block!");
};
lambda();
Почему это? Разве они не должны быть семантически эквивалентны, учитывая то, что мы видели выше?