Tôi vừa đọc về tính năng mới có tên là "khấu trừ kiểu trả về" có sẵn trong C++ 14 và tôi có câu hỏi về đệ quy trong hàm của kiểu đó. Tôi đã học được rằng sự trở lại đầu tiên trong hàm đó phải cho phép suy ra kiểu trả về.Trả lại loại khấu trừ trong C++ 14
Các ví dụ do Wiki cung cấp hoàn toàn đáp ứng quy tắc đó.
auto Correct(int i) {
if (i == 1)
return i; // return type deduced as int
else
return Correct(i-1)+i; // ok to call it now
}
auto Wrong(int i) {
if (i != 1)
return Wrong(i-1)+i; // Too soon to call this. No prior return statement.
else
return i; // return type deduced as int
}
Câu hỏi của tôi là: Tại sao khi tôi đã thay đổi Wrong(int i)
-Wrong(auto i)
, Wrong
chức năng bắt đầu để biên dịch? Điều gì ẩn sau sự thay đổi nhỏ này?
Về cơ bản, bạn đã tạo 'Sai' thành mẫu chức năng. –
'auto' như một tham số trong một hàm thông thường là phần mở rộng GCC, không phải chuẩn C++ 14. –
[không biên dịch] (http://coliru.stacked-crooked.com/a/d54be4e8410c0a7f) –