c++中代码命名空间规约

c++中代码命名空间规则
#include<iostream>
using namespace std;
void swap(int& a, int& b)
{


}


int main()
{



int x,y;

x=1;
y=2;

swap(x,y);


return 0;
}


结果进入的是自定义函数swap,不是库里的,

问题来了:

但编译器发现swap的时候, 有2个选择,一个是库,一个是自己定义的。

那么为什么编译器,会去调用我们自己写的呢?


我自己的在全局域中,而库的则在std中。

但是 故意加一句:usinsg namepasce std;

就是想知道,编译器为什么不去调用库的,
------解决方案--------------------
名字在查找的时候,优先查找local,再是global
------解决方案--------------------
(1) 类成员函数优先 ( 对象所在的类 -》 基类 )。 一经找到就停止查找 。 

(2 )如果没有 ,在相应的名字空间中做进一步的搜索 ; 


(3) 如果还没有 , 会根据函数参数所在的名字空间中查找 (keoning 查找 )。

------解决方案--------------------
其实如果要使用系统函数,特别是在MFC中,在函数名前加上::就行了,
------解决方案--------------------
马克一下,我也想不懂。