Задача -C++ 11 -Почему мы не можем присвоить блок лямбде?

Итак, я только что обновился до Xcode 4.4 и заметил в журнале изменений:

Apple LLVM compiler supports additional C++11 features, including lambdas

Это здорово! Итак, я занялся кодированием и кое-что выяснил :

  1. . Лямбда-выражения назначаются блокам Objective -C:

    void (^block)() = []() -> void { 
        NSLog(@"Inside Lambda called as block!");
    };
    
    block();
    
  2. std::functionможет содержать цель -блок C:

    std::function<void(void)> func = ^{
        NSLog(@"Block inside std::function");
    };
    
    func();
    
  3. Мы не можем назначить блок Objective -C лямбде:

    auto lambda = []() -> {
        NSLog(@"Lambda!");
    };
    
    lambda = ^{ // error!
        NSLog(@"Block!");
    };
    
    lambda();
    

Почему это? Разве они не должны быть семантически эквивалентны, учитывая то, что мы видели выше?

15
задан ildjarn 26 July 2012 в 19:18
поделиться