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#ですか?
Thomas Matthews

^確かにマクロのように見えます#define。ステートメントをスキャンしてみてください。実際には、あなたは実行することができgcc-E、マクロを拡張するためのオプション:g++ -E main.cpp
neshkeev

これはclangでコンパイルされていますか?
KamilCuk


回答:


3

^() {}記号の付いた重複を見つけるのは難しいので、回答を投稿します。

これらは「ブロック」であり、ラムダのようなクロージャーを作成するclangコンパイラー拡張機能です。

詳細については、wikiclangsブロックの言語仕様をご覧ください。

空の引数リスト(void)がある場合、は省略できます。これ^ { recvData(data, NULL); }はと同じ^ void (void) { recvData(data, NULL); }です。


3
これらはCおよびC ++コードで機能しますが、主にObjective-Cの世界を中心に設計されており、C ++を使用している場合は、これらの代わりに、はるかに慣用的なラムダとstd :: functionを使用する必要があります(ただし、std :: functionはブロックを保持できることに注意してください)
Richard J. Ross III
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.