^ () {} Và ^ {} có nghĩa là gì trong C ++?


10

Gần đây tôi đã đọc một số mã C ++ như thế này:

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


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

Tôi chưa từng thấy ^() {}cũng không ^{}. Có ý nghĩa gì? Một số loại chức năng ẩn danh?


3
Đây có phải là quản lý C ++, còn gọi là C ++ / CLI? Đây có phải là C # không?
Thomas Matthews

^chắc chắn trông giống như một macro, cố gắng quét qua các #definebáo cáo. Trong thực tế, bạn có thể chạy gccvới -Etùy chọn để mở rộng các macro:g++ -E main.cpp
neshkeev

Đây có phải là biên dịch với tiếng kêu?
KamilCuk


Câu trả lời:


3

Thật khó để tìm một bản sao với ^() {}các biểu tượng, vì vậy tôi sẽ đăng câu trả lời.

Đây là các "khối", là một phần mở rộng trình biên dịch clang tạo ra các bao đóng giống như lambda.

Thông tin thêm tại wiki và trong Đặc tả ngôn ngữ clangs cho Khối .

Khi có một danh sách đối số trống, (void)có thể bỏ qua, ^ { recvData(data, NULL); }giống như ^ void (void) { recvData(data, NULL); }.


3
Lưu ý rằng trong khi chúng hoạt động với mã C & C ++, chúng chủ yếu được thiết kế xung quanh một thế giới khách quan và nếu bạn đang sử dụng C ++, bạn gần như chắc chắn nên sử dụng hàm lambdas và std :: đặc biệt hơn nhiều so với các hàm này (mặc dù lưu ý rằng hàm std :: có thể giữ các khối )
Richard J. Ross III
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.