Inline function là gì?

Noun C++
Hàm nội tuyến

Nếu một hàm (function) là nội tuyến (inline), trình biên dịch (compiler) sẽ đặt một bản sao mã của hàm đó tại mỗi điểm mà hàm được gọi tại thời điểm biên dịch (compile time).

Bất kỳ thay đổi nào đối với một hàm nội tuyến (inline function) có thể yêu cầu tất cả các client của hàm phải được biên dịch lại vì trình biên dịch sẽ cần phải thay thế tất cả mã một lần nữa nếu không nó sẽ tiếp tục với chức năng cũ.

Để một hàm là nội tuyến, hãy đặt từ khóa (keyword) inline trước tên hàm và định nghĩa hàm trước khi thực hiện bất kỳ lệnh gọi nào đến hàm. Việc sử dụng specifier "inline" chỉ là một gợi ý cho trình biên dịch không phải là lệnh do đó trình biên dịch có thể bỏ qua gợi ý đó.

Trình biên dịch có thể không thực hiện nội tuyến trong các trường hợp như:

  • Nếu một hàm chứa một vòng lặp (loop).
  • Nếu một hàm chứa các biến tĩnh (static variable).
  • Nếu một hàm là đệ quy (recursive).
  • Nếu kiểu trả về của hàm (return type) không phải là void và câu lệnh trả về (return statement) không tồn tại trong thân hàm (function body).
  • Nếu một hàm chứa câu lệnh switch hoặc goto.

Trong hầu hết các trường hợp, nội tuyến có thể cải thiện thời gian thực thi (execution time) bằng cách tránh chi phí (overhead) của lời gọi hàm (function call). Tuy nhiên, nếu hàm không được gọi thường xuyên, nó sẽ không có cải thiện rõ ràng.

Trong hầu hết các trường hợp, nội tuyến tăng kích thước chương trình. Nhưng trong một số trường hợp, khi kích thước hàm nhỏ hơn kích thước mã lệnh gọi hàm, nội tuyến có thể làm giảm kích thước chương trình.


#include 
using namespace std;
inline int cube(int s)
{
    return s*s*s;
}
int main()
{
    cout 
Learning English Everyday