Я недавно прочитал некоторый код C ++, как это:
setData(total, &user, ^() {
struct dst_t to = {ip, port};
sendData(to, data);
});
getData(total, ^{
recvData(data, NULL);
});
Я никогда не видел ^() {}
ни ^{}
. Что они имеют в виду? Какая-то анонимная функция?
^
уверен, что выглядит как макрос, попробуйте просмотреть#define
заявления. На самом деле вы можете запуститьgcc
с-E
возможностью расширения макросов:g++ -E main.cpp
Ответы:
Трудно найти дубликат с
^() {}
символами, поэтому я выложу ответ.Это «блоки», которые являются расширением clang-компилятора, которое создает лямбда-подобные замыкания.
Больше информации на вики и в clangs. Спецификация языка для блоков .
Когда есть пустой список аргументов,
(void)
можно опустить,^ { recvData(data, NULL); }
то же самое, что и^ void (void) { recvData(data, NULL); }
.источник