Tôi nghi ngờ về các hàm nội tuyến. Các hàm nội tuyến sẽ không liên quan đến bất kỳ lệnh gọi hàm nào mà chỉ thay thế định nghĩa hàm ở bất cứ đâu cuộc gọi được thực hiện cho hàm nội tuyến. Các hàm nội tuyến có kiểu thực thi không giống như macro. Điều gì sẽ xảy ra nếu các hàm đệ quy được thực hiện nội dòng?Điều gì sẽ xảy ra nếu chúng ta tạo các hàm đệ quy làm nội dòng?
Trả lời
"nội tuyến" không phải là đảm bảo, đó là yêu cầu.
Hàm nội tuyến đệ quy của bạn sẽ không (thường) là nội dòng.
- Theo một số bình luận chỉ ra, có là trường hợp đặc biệt (ví dụ sử dụng pragmas biên dịch cụ thể) trong đó nội tuyến là càng tốt.
Chỉ vì nó là đệ quy, không có nghĩa là trình biên dịch của bạn sẽ không inline nó: http://msdn.microsoft.com/en-us/library/69hzy453(v=vs.80).aspx – SecurityMatt
cải thiện câu trả lời của bạn, với liên kết được đưa ra bởi @SecurityMatt, có hầu hết các trình biên dịch không inline chức năng đệ quy nhưng một số làm .... đọc bình luận của tôi cho câu hỏi cũng có. –
inline
chỉ là một đề xuất cho trình biên dịch và không đảm bảo rằng một hàm sẽ được gạch chân.
Rõ ràng, trình biên dịch sẽ không thể nội tuyến một hàm đệ quy vô hạn. Nó có thể không inline nó ở tất cả hoặc nó có thể inline nó chỉ là một vài cấp độ sâu.
[Có vài cấp độ có thể trong trình biên dịch của Microsoft] (http://wiki.answers.com/Q/What_is_inline_function_in_C_Can_you_make_inline_function_recursive_or_not_If_make_can_complier_will_compile_that_code) Chỉ muốn chia sẻ liên kết với bạn –
- 1. Điều gì sẽ xảy ra nếu xác định lại chức năng nội dòng?
- 2. Nếu không xóa biến ThreadLocal, Điều gì sẽ xảy ra?
- 3. Điều gì sẽ xảy ra nếu tôi ReleaseMutex() hai lần?
- 4. Điều gì sẽ xảy ra nếu một hàm tạo của shared_ptr bị lỗi?
- 5. Điều gì sẽ xảy ra nếu bạn không gọi hàm khởi tạo cha mẹ một cách rõ ràng trong PHP?
- 6. điều gì sẽ xảy ra nếu php.ini bị thiếu?
- 7. Điều gì sẽ xảy ra với bộ nhớ được cấp phát bởi `mới` nếu hàm tạo khởi tạo?
- 8. Điều gì sẽ xảy ra nếu tôi gán con trỏ hàm, thay đổi số tham số
- 9. Điều gì sẽ xảy ra nếu hàm main() không trả về giá trị int?
- 10. Điều gì xảy ra nếu lỗi mới?
- 11. Hàm đệ quy này giải đố tôi, chuyện gì đang xảy ra?
- 12. Điều gì sẽ xảy ra với chức năng nội tuyến bên ngoài?
- 13. điều gì sẽ xảy ra nếu bạn sử dụng attribute_to mà không có has_one tương ứng?
- 14. Điều gì sẽ xảy ra nếu hai tập lệnh python muốn viết trong cùng một tệp?
- 15. Điều gì sẽ xảy ra nếu các thẻ meta có mặt trong phần thân tài liệu?
- 16. Điều gì sẽ xảy ra nếu phần đầu tiên của cấu trúc nếu là sai?
- 17. Trong Java nếu một sợi bị giết, điều gì sẽ xảy ra với luồng khác?
- 18. C++ 11 tự động: điều gì sẽ xảy ra nếu nó được tham chiếu liên tục?
- 19. Điều gì sẽ xảy ra nếu tôi gọi một hàm thành viên đối tượng từ một chuỗi khác?
- 20. Điều gì sẽ xảy ra khi chúng tôi đặt Xmx và Xms bằng kích thước
- 21. Điều gì sẽ là khác nhau trong Java nếu khai Enum không có phần đệ quy
- 22. Điều gì sẽ xảy ra nếu đối tượng mẫu mới không được gán cho một biến?
- 23. Điều gì sẽ xảy ra với Braintree.js nếu Javascript bị tắt?
- 24. Điều gì sẽ xảy ra nếu tôi gọi một hàm java từ nhiều luồng từ C với JNI?
- 25. Điều gì sẽ xảy ra nếu bạn biên dịch một tệp java rỗng?
- 26. Điều gì sẽ xảy ra sau khi gói bị bắt?
- 27. Điều gì sẽ xảy ra khi Stack và Heap Collide
- 28. Điều gì sẽ xảy ra nếu kích thước của chuỗi bể vượt quá?
- 29. Sử dụng pin, điều gì sẽ xảy ra?
- 30. Điều gì sẽ xảy ra nếu tôi không đóng cơ sở dữ liệu trong Android?
Bản sao có thể có của http://stackoverflow.com/questions/190232/can-a-recursive-function-be-inline – SecurityMatt
@SecurityMatt có thể là lần tiếp theo tôi sẽ cẩn thận hơn. Cảm ơn bạn. –
câu trả lời kỳ lạ nhưng: Nhiều trình biên dịch cũng có thể nội tuyến mở rộng một số hàm đệ quy; Việc triển khai Microsoft sẽ không nội tuyến các hàm đệ quy trừ khi chúng có một dòng #pragma inline depth (n) xác định độ sâu recusion tối đa mà hàm sẽ có. –