Tôi đang đọc đây trên cppreference về cách một kiểu trả về của một lambda C++ 11 là suy luận:C++ 11 hạn chế về kiểu lambda trở
if the body consists of the single
return
statement, the return type is the type of the returned expression (after rvalue-to-lvalue, array-to-pointer, or function-to-pointer implicit conversion)
Vì vậy, tôi nghĩ rằng đó có nghĩa là một lambda có thể chỉ có một câu lệnh trả về. Nhưng tại sao nó hoạt động với nhiều câu lệnh trả về vẫn còn?
compiles này trên cả hai trình biên dịch:
auto f = [] (bool c1, bool c2) {
if (c1) return 1;
if (c2) return 2;
else return 3;
};
Trang bạn liên kết đến cũng cho thấy rằng các quy tắc thay đổi trong C++ 14. Đoán đầu tiên của tôi là các trình biên dịch đang thực hiện các quy tắc C++ 14 ngay cả trong chế độ C++ 11. – hvd
@hvd Yup, đó là điều tôi nghi ngờ nhưng tôi vẫn hoài nghi. – 0x499602D2
FWIW, tôi đã kiểm tra những gì C++ 11 nói, và nó phù hợp với những gì bạn đã tìm thấy trực tuyến, do đó, có, nó sẽ tạo ra một chẩn đoán thời gian biên dịch. Điều đó nói rằng, việc thực hiện quy tắc C++ 14 không thể gây ra mã C++ 11 hợp lệ bị từ chối, vì vậy nó chỉ có thể là một vấn đề nhỏ. – hvd