Функция друга, определенная в классе, автоматически встроена? - PullRequest
8 голосов
/ 20 октября 2010

Если функция-член определена внутри класса, это встроенная функция. Э.Г.

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

Мой вопрос заключается в том, автоматически ли встроена функция друга, не входящая в класс, определенная внутри класса.

* 1006 Е.Г. *

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

Будет приветствоваться соответствующая цитата / para_no из стандарта. Спасибо.

1 Ответ

13 голосов
/ 20 октября 2010

Да, это так.§11.4 / 5:

Функция может быть определена в объявлении друга класса тогда и только тогда, когда класс является нелокальным классом (9.8), имя функции является неквалифицированным, ифункция имеет область имен. Такая функция неявно встроена. Функция друга, определенная в классе, находится в (лексической) области видимости класса, в котором она определена.Функция друга, определенная вне класса, не является (3.4.1).

Поскольку определение класса предположительно находится в заголовочном файле, функция будет многократно определена, поэтому она должна быть inline.

...