Inline-functies zijn functies waarvoor de compiler kan (maar niet verplicht is) de aanroep te vervangen door de directe invoeging van de functietekst op de plaats van de aanroep. Hiervoor wordt het sleutelwoord inline gebruikt.
inline geeft de compiler een advies, maar is geen verplichting: het kan worden genegeerd als de functie te complex is.Beperkingen en risico's:
Voorbeeld:
inline int add(int a, int b) { return a + b; } struct X { int get() const { return value; } int value; }; // get() wordt als inline beschouwd
Vraag: Garandeert het sleutelwoord inline dat de functie in alle aanroeppunten zal worden ingebed?
Antwoord: Nee. De compiler beslist zelf over de inline-substitutie op basis van interne heuristieken. inline is slechts een aanbeveling.
Verhaal
In een financieel systeem werd een vaak gebruikte logger geschreven met tientallen grote inline-functies. Na de groei van het systeem nam de omvang van het binaire bestand exponentieel toe, wat leidde tot langere linktijd en verminderde cache-efficiëntie op de server.
Verhaal
Tijdens de migratie van cross-platform software werd ontdekt dat sommige compilers (bijvoorbeeld MSVC en GCC) inline verschillend verwerkten: sommige functies werden niet inline uitgerold, terwijl andere dat wel werden, wat leidde tot moeilijk reproduceerbare verschillen in snelheid en bestandsgrootte tussen platforms.
Verhaal
Een ontwikkelaar verklaarde inline-functies alleen in de header-bestanden, maar plaatste de implementatie in een apart cpp-bestand. Dit leidde tot fouten bij het linken zoals multiple definition of unresolved external, omdat inline-functies precies in de header-bestanden moeten worden gedefinieerd.