2016-07-12 40 views
1

通常,當我們直接在類體中定義一個成員函數時,它隱含地是inline。但是這個東西:課堂上定義的內聯朋友函數

class Foo { 
public: 
    friend void swap(Foo& a, Foo& b) { ... } 

    ... 
}; 

是在swap隱含inline與否?

+0

我認爲它必須是內聯的。非內聯功能不能進入標題。類的主體必須可插入標題中。因此,在類定義體內提供的所有功能都必須是可關聯的功能。 – PSkocik

+0

這是否允許?在類體內定義一個朋友函數是什麼意思?它是否進入封閉的名稱空間而不是成員? – jtbandes

+0

@jtbandes是的。這個定義了一個函數在同一個命名空間中,類就在這裏。 –

回答

5

是的。參見[class.friend/6-7]從標準:

的函數可以在一個類的一個朋友聲明來定義當且僅當所述類是一個非局部類(9.8),該函數名稱是不合格的,並且該函數具有命名空間範圍。

這樣的函數隱含地爲inline