Я обнаружил эту странную конструкцию, которая, по-видимому, пришла из C и принята в Objective- C и C ++ (как расширение). Для него есть даже новая разработка в clang . Я был очень удивлен, когда увидел это, и я никогда не видел, чтобы кто-нибудь этим пользовался.
Согласно спецификациям, похоже, что вы можете объявлять «блоки» с помощью синтаксиса:
// Declaration
int (^x)(char);
void (^z)(void);
int (^(*y))(char) = &x;
// Invocation
x('a');
(*y)('a');
(true ? x : *y)('a')
Все переменные в блоке являются константными. Почему это полезно?
Блок, который ссылается на эти переменные, будет импортировать переменные как константные вариации. cppreference). Есть ли у кого-нибудь какие-либо ссылки или историческая справка о том, почему они существуют и для чего они используются?
ПРИМЕЧАНИЕ. Мне было достаточно ясно сказано, что это расширение C ++, которое, вероятно, поддерживает clang. У меня все еще остается вопрос - зачем нам это нужно?