Що означають ^ () {} і ^ {} в C ++?


10

Нещодавно я прочитав такий код C ++, як це:

setData(total, &user, ^() {
  struct dst_t to = {ip, port};
  sendData(to, data);
});


getData(total, ^{
  recvData(data, NULL);
});

Я ніколи не бачив ^() {}ні ^{}. Що вони означають? Якась анонімна функція?


3
Це керований C ++, він же C ++ / CLI? Це C #?
Томас Меттьюз

^переконайтеся, що схожий на макрос, спробуйте перевірити #defineоператори. Насправді ви можете запустити gccз -Eопцією розширення макросів:g++ -E main.cpp
neshkeev

Це складено з кланг?
KamilCuk


Відповіді:


3

Важко знайти дублікат із ^() {}символами, тому я опублікую відповідь.

Це "блоки", що є розширенням компілятора clang, яке створює лямбда-закриття.

Більше інформації на wiki та в clangs Специфікація мови для блоків .

Якщо є порожній список аргументів, цей аргумент (void)можна опустити, ^ { recvData(data, NULL); }той самий, як і ^ void (void) { recvData(data, NULL); }.


3
Зауважте, що, працюючи в коді C&C ++, вони були розроблені в основному навколо об'єктивного світу, і якщо ви використовуєте C ++, ви майже напевно повинні використовувати набагато більше ідіоматичних лямбда і функції std :: замість цих (хоча зауважте, що std :: функція може містити блоки )
Річард Дж. Росс III
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.