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 컴파일러 확장 인 "블록"입니다.

위키clangs 언어 사양 블록에 대한 추가 정보 .

빈 인수 목록 (void)이 있으면를 생략 할 수 있습니다.는와 ^ { recvData(data, NULL); }동일합니다 ^ void (void) { recvData(data, NULL); }.


3
C & C ++ 코드에서 작동하는 동안 주로 objective-c 세계를 중심으로 설계되었으며 C ++을 사용하는 경우 훨씬 더 관용적 인 람다와 std :: 함수를 사용해야합니다 (물론) 참고 표준을 :: 기능 블록을 저장할 수 )
리처드 J. 로스 III
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.