Что означает и делает "long long (^ blockFun) () = (long long (^) ()) moreBlockFun"? - PullRequest
1 голос
/ 06 октября 2009

Я пытаюсь эффективно изучать и использовать блоки.

В сети я наткнулся на этот код:

long long (^blockFun)() = (long long (^)())moreBlockFun;

Я думаю, что он пытается создать блок, который ожидает блок, который возвращает long, и я думаю, что он тоже выполняет какое-то приведение.

1 Ответ

7 голосов
/ 06 октября 2009

Это приведение типа блока, и да, синтаксис не очень хорош. Мы предполагаем, что moreBlockFun является блоком, который не принимает параметров и возвращает что-то с разумным приведением к long long - эта сигнатура типа пишется long long (^)(). Поэтому мы создаем новое локальное имя для этого блока с именем blockFun с синтаксисом long long (^blockFun)() и выполняем приведение.

Это беспорядок, в основном унаследованный от обозначения типа указателя функции, который практически каждый программист С должен искать около 482 раз, прежде чем он запомнит это. Вы не одиноки!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...