Có thể/thực hiện các hàm lambda nội bộ của trình biên dịch để tăng hiệu quả, vì nó có thể với các hàm tiêu chuẩn đơn giản?Có phải lambdas được nội tuyến giống như các hàm trong C++ không?
ví dụ:
std::vector<double> vd;
std::for_each(vd.begin(), vd.end(), [](const double d) {return d*d;});
Hoặc có mất hiệu quả do thiếu tối ưu hóa không?
Câu hỏi thứ hai: nơi tôi có thể kiểm tra xem trình biên dịch tôi sử dụng có tối ưu hóa các cuộc gọi của các hàm nội tuyến, được gửi đến một thuật toán không? Ý của tôi là, nếu một hàm - không phải là đối tượng hàm - được gửi đến một thuật toán, thì hàm cuối sẽ nhận một con trỏ tới hàm, và một số trình biên dịch tối ưu hóa con trỏ tới các hàm nội tuyến và các hàm khác thì không.
Một số được tối ưu hóa, một số không giống như bất kỳ cuộc gọi chức năng nào. Nếu bạn quan tâm đến một cuộc gọi cụ thể, bạn cần phải kiểm tra xem trình biên dịch cụ thể của bạn làm gì với cuộc gọi cụ thể đó. –
Bạn đang nhầm lẫn các khái niệm ở đây. Tất cả lambdas đều là nội tuyến. Không phải tất cả các cuộc gọi đến họ đều nhất thiết được gạch chân. –
Tôi không nghĩ rằng một lambda có thể được inlined nếu nó được chuyển đến một chức năng bên ngoài. – nobar