Trong C cổ C và C ++, inline
giống như register
: một gợi ý (không có gì hơn một gợi ý) cho trình biên dịch về một tối ưu hóa có thể.
Trong C ++ hiện đại, inline
nói với trình liên kết rằng, nếu tìm thấy nhiều định nghĩa (không phải khai báo) trong các đơn vị dịch khác nhau, thì tất cả đều giống nhau và trình liên kết có thể tự do giữ một và loại bỏ tất cả các định nghĩa khác.
inline
là bắt buộc nếu một hàm (bất kể phức tạp hay "tuyến tính") được xác định trong tệp tiêu đề, để cho phép nhiều nguồn bao gồm nó mà không gặp lỗi "nhiều định nghĩa" bởi trình liên kết.
Các hàm thành viên được định nghĩa bên trong một lớp là "nội tuyến" theo mặc định, cũng như các hàm mẫu (trái ngược với các hàm toàn cục).
//fileA.h
inline void afunc()
{ std::cout << "this is afunc" << std::endl; }
//file1.cpp
#include "fileA.h"
void acall()
{ afunc(); }
//main.cpp
#include "fileA.h"
void acall();
int main()
{
afunc();
acall();
}
//output
this is afunc
this is afunc
Lưu ý việc đưa tệpA.h vào hai tệp .cpp, dẫn đến hai trường hợp afunc()
. Trình liên kết sẽ loại bỏ một trong số họ. Nếu không inline
được chỉ định, trình liên kết sẽ khiếu nại.