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/