C++ Funzioni inline


Esempio

Una funzione dichiarata in inline può essere definita in più unità di traduzione, a condizione che tutte le definizioni siano identiche. Deve anche essere definito in ogni unità di traduzione in cui viene utilizzato. Pertanto, le funzioni inline dovrebbero essere definite nelle intestazioni e non è necessario menzionarle nel file di implementazione.

Il programma si comporterà come se ci fosse una singola definizione della funzione.

foo.h :

#ifndef FOO_H
#define FOO_H
#include <iostream>
inline void foo() { std::cout << "foo"; }
void bar();
#endif

foo.cpp :

#include "foo.h"
void bar() {
    // more complicated definition
}

main.cpp :

#include "foo.h"
int main() {
    foo();
    bar();
}

In questo esempio, la funzione più semplice foo è definita in linea nel file di intestazione mentre la bar funzione più complessa non è in linea ed è definita nel file di implementazione. Entrambe le unità di traduzione foo.cpp e main.cpp contengono le definizioni di foo , ma questo programma è ben formato poiché foo è in linea.

Una funzione definita all'interno di una definizione di classe (che può essere una funzione membro o una funzione amico) è implicitamente in linea. Pertanto, se una classe è definita in un'intestazione, le funzioni membro della classe possono essere definite all'interno della definizione della classe, anche se le definizioni possono essere incluse in più unità di traduzione:

// in foo.h
class Foo {
    void bar() { std::cout << "bar"; }
    void baz();
};

// in foo.cpp
void Foo::baz() {
   // definition
}

La funzione Foo::baz è definito fuori linea, quindi non è una funzione inline, e non deve essere definito nell'intestazione.