Dalam bahasa C dan C ++ kuno, inline
seperti register
: sebuah saran (tidak lebih dari sebuah saran) kepada kompiler tentang kemungkinan optimasi.
Dalam C ++ modern, inline
memberi tahu linker bahwa, jika banyak definisi (bukan deklarasi) ditemukan dalam unit terjemahan yang berbeda, semuanya sama, dan linker dapat dengan bebas menyimpan satu dan membuang semua yang lain.
inline
wajib jika suatu fungsi (tidak peduli seberapa kompleks atau "linier") didefinisikan dalam file header, untuk memungkinkan banyak sumber untuk memasukkannya tanpa mendapatkan kesalahan "beberapa definisi" oleh linker.
Fungsi anggota yang didefinisikan di dalam kelas adalah "inline" secara default, seperti fungsi templat (berbeda dengan fungsi global).
//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
Perhatikan penyertaan fileA.h ke dalam dua file .cpp, menghasilkan dua contoh afunc()
. Tautan akan membuang salah satunya. Jika tidak inline
ditentukan, penghubung akan mengeluh.