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