//example:
namespace Jack{
double fetch;//...变量
double bucket(double n){ //...函数
...
}
//...结构体...
struct node{
};
}
using Jack::fetch ; //-------下面就可以直接使用fetch。-------using声明--只能一个
using namespace Jack;//-----Jack里面的都可以使用。
Jack::fetch;// ------这样可以避免存在多个名称空间有相同名称的冲突。
如果名称空间(Jack)和全局(函数外)以及局部(函数内)都有同一个变量mi
;则mi
—局部变量; ::mi
—全局变量; Jack::mi
—名称空间变量。
namespace people{
string name;
}
string name = "global";
int main()
{
people::name = "space";
{
string name = "local";
cout<<name<<endl;
cout<<::name<<endl;
cout<<people::name<<endl;
}
//local
//global
//space
}
名称空间可以嵌套;
namespace people{
string name;
namespace man{
int age;
int sex;
}
}
int main()
{
people::name = "xxx";
people::man::age = 14;
}
当使用using编译指令导入最外层名称空间时,其内部的using编译指令导入的名称空间也随之导入。
在函数类部存在和名称空间相同的变量名时,使用using编译指令,则函数内的局部变量将隐藏名称空间变量,或者全局变量(相同名),并使用解析符::可以调用 ;;如果使用using声明,则函数内局部变量将会和名称空间的变量冲突。
namespace people{
string name;
}
string name = "global";
int main()
{
using people::name;
people::name = "space";
cout<<name<<endl;
{
string name = "local";
cout<<name<<endl;
cout<<people::name<<ednl;
}
}
//space
//local
//space
//可见局部变量覆盖了名称空间同名变量,但是名称空间变量还是存在的。
//名称空间可以改名
namespace newname = oldname;
普通名称空间的链接性是外部的,而匿名名称空间的链接性是内部的(只能在该文件下使用)