Tôi có đoạn mã sau:Tại sao tôi nhận được lỗi khấu trừ loại cho lambda trả về lambda với nhiều đường dẫn trả về?
int main() {
auto f = [] {
if (1) return [] { return 1; };
else return [] { return 2; };
};
return f()();
}
điều này làm tăng lỗi biên dịch sau đây sử dụng GCC 5.2.1:
error: inconsistent types ‘main()::<lambda()>::<lambda()>’ and
‘main()::<lambda()>::<lambda()>’ deduced for lambda
return type else return [] { return 2; };
Bây giờ rõ ràng là hai loại nhìn giống nhau, vì vậy tôi không chắc chắn nếu đây là GCC với một thông báo lỗi gây hiểu lầm hoặc nếu nó thực sự là một lỗi. Theo kiến thức của tôi, điều này sẽ được biên dịch; kiểu trả về lambda nên được suy ra là std::function<int()>
. Thật thú vị, nếu tôi khai báo trước lambda return và trả về cùng một biến hai lần, nó hoạt động.
Có ai có thể làm sáng tỏ điều gì đang xảy ra không? Tôi đã tìm thấy các câu hỏi tương tự, nhiều lỗi do lỗi GCC, nhưng điều này có vẻ khác.
họ có các loại khác nhau: https://ideone.com/Eo4OXW –
Cảm ơn để chỉnh sửa câu hỏi của tôi để định dạng mã tốt hơn! Tôi không chắc chắn lý do tại sao tôi nhận được phiếu bầu âm. Tôi rất sẵn lòng đưa thêm "nỗ lực nghiên cứu" nếu cần thiết. Tôi cảm thấy đây là một lỗi biên dịch khá tò mò vì vậy tôi đã hy vọng nhiều người hiểu biết hơn ở đây sẽ biết những gì đang xảy ra. Vui lòng chỉ cho tôi bất kỳ tài nguyên nào tôi nên sử dụng nếu điều này không mang tính cấu trúc. – Alex
Tôi không thực sự hiểu các loại lambda, xin lỗi về điều đó. Các thông báo lỗi không giúp đỡ, tuy nhiên ... – Alex