Về mặt kỹ thuật, từ khóa inline
chỉ có nghĩa là định nghĩa được phép trong nhiều đơn vị dịch. Tức là, nếu bạn có một hàm nội tuyến được định nghĩa trong một tệp tiêu đề và tiêu đề đó được bao gồm trong nhiều tệp nguồn thì điều đó là tốt. Đối với một chức năng không phải là nội tuyến, không phải mẫu, điều đó sẽ là bất hợp pháp.
Nhưng trình biên dịch có thể và tận dụng lợi thế của việc có thể xem mã của hàm đang được gọi. Điều này xảy ra không chỉ cho các hàm nội tuyến mà còn bất kỳ hàm nào khác có mã có thể được hiển thị. Nhiều trình biên dịch cố gắng thực hiện một dự đoán tốt về việc có nên đặt mã nội tuyến hay không. Có mã được inlined có thể làm cho chương trình lớn hơn hoặc nhỏ hơn, nhanh hơn hoặc chậm hơn. Nếu trình biên dịch có thể xác định rằng mã có thể sẽ nhanh hơn và nhỏ hơn khi mã được gạch chân, thì nó sẽ làm điều đó. Nếu không, nó phải xem xét sự cân bằng.
Nhiều trình biên dịch hiện đại có thể tối ưu hóa thời gian liên kết, trong đó mã không được bắt đầu có thể được gạch chân trong giai đoạn liên kết, với một số chi phí trong thời gian liên kết. Có thể có một số cơ hội tối ưu hóa bị mất khi bị trì hoãn cho đến thời gian liên kết.
Theo kinh nghiệm của riêng tôi, tôi thấy rằng việc tạo các chức năng nhỏ là nội tuyến thường là một chiến thắng cho cả kích thước và tốc độ. Đối với các chức năng lớn hơn, tôi thường thấy nó làm cho các chương trình nhanh hơn nhưng lớn hơn, nhưng tôi cũng thấy nó hiếm khi làm cho các chương trình chậm hơn và lớn hơn. Nếu hiệu suất của một chức năng cụ thể là quan trọng, bạn sẽ cần phải thực hiện các phép đo để giúp lựa chọn có nên nội tuyến hay không.
Nguồn
2015-01-19 16:15:33
Khi bạn bao gồm tệp tiêu đề, trình xử lý trước sẽ sao chép và dán mã ở nơi bạn đã bao gồm. – Andrew
Tôi đề nghị bạn hãy xem qua đây: http://programmers.stackexchange.com/questions/180904/are-header-files-actually-good –
'inline' chủ yếu không có nghĩa là" làm cho mã này nội dòng "trong C++ , nó có nhiều hơn để làm với cách giải quyết va chạm tên thời gian liên kết. "Đưa mã nội tuyến" có rất ít ý nghĩa trong bối cảnh của tiêu chuẩn C++. – Yakk