2010-10-20 5 views
7

Se una funzione membro è definita all'interno della classe, è una funzione inline. Per esempio.La funzione amica è definita in classe automaticamente in linea?

struct X 
{ 
    void mem_f() {} //mem_f is inline 
}; 

La mia domanda è se una funzione di amico non membro definita all'interno della classe sia anche automaticamente in linea.

E.g.

struct Y 
{ 
    friend void friend_f() {} //is friend_f inline? 
}; 

Una citazione/paragrafo pertinente dallo standard sarebbe molto gradita. Grazie.

risposta

13

Sì, lo è. §11.4/5:

Una funzione può essere definita in una dichiarazione amico di una classe se e solo se la classe è una classe non-locale (9.8), il nome della funzione è qualificato, e la funzione ha scope di namespace. Tale funzione è implicitamente in linea. Una funzione amico definita in una classe è nello scope (lessicale) di la classe in cui è definita. Un amico funzione definita al di fuori della classe non è (3.4.1).

Poiché la definizione classe è presumibilmente in un file di intestazione, la funzione sarà moltiplicazione definiti, quindi deve essere inline.