Koenig Lookup:
如果你給函數(shù)提供一個(gè) class 類型的實(shí)參,那么在名稱搜索時(shí),編譯器將認(rèn)為包含實(shí)參類型的命名空間中的同名函數(shù)的可選函數(shù)。
接口原則:
對(duì)于一個(gè)類X,所有的函數(shù),包括自由函數(shù),只要同時(shí)滿足
就是X的邏輯組成部分,因?yàn)樗鼈兘M成了X的接口。
接口原則與 Koenig lookup 的行為相同,因?yàn)?Koenig lookup 的行為正是建立在接口原則的基礎(chǔ)上的。
小結(jié):
- 接口原則:對(duì)于 class X,所有的函數(shù),包括自由函數(shù),只要同時(shí)滿足(a)“提及”X,(b)與 X“同期提供”,那么它就是X的邏輯組成部分,因?yàn)樗鼈兪?X 的接口的一部分。
- 因此,成員和非成員函數(shù)都是一個(gè) class 的邏輯組成部分。只不過(guò)成員函數(shù)比非成員函數(shù)有更強(qiáng)的關(guān)聯(lián)關(guān)系。
- 在接口原則中,對(duì)“同期提供”的最有用的解釋是“出現(xiàn)在相同的頭文件和/或命名空間中”。如果函數(shù)與 class 出現(xiàn)在相同的頭文件中,在依賴性分析時(shí),它是此 class 的組成部分。如果函數(shù)與類出現(xiàn)在相同的命名空間中,在對(duì)象引用和名稱搜索時(shí),它是此 class 的組成部分。
文章來(lái)源:
http://my.donews.com/robinchow/2007/01/14/tlcchrdcrthuzvbqdhrczbijwughfpwzbybi/