1、简化了命名空间的成员访问
namespace veryLongName {
int a=100;
void func(){cout<<"hello namespace"<<endl;}
}
void test07()
{
//使用veryLongName命名空间
using namespace veryLongName;
//出现的变量 从当前作用寻找a,如果找不到在从veryLongName命名空间中找
cout<<"a = "<<a<<endl;
func();
}
2、using 使用整个命名空间
namespace veryLongName {
int a=100;
void func(){cout<<"hello namespace"<<endl;}
}
void test07()
{
int a=200;
//使用veryLongName命名空间
using namespace veryLongName;
//出现的变量 从当前作用寻找a,如果找不到在从veryLongName命名空间中找
cout<<"a = "<<a<<endl;//访问的是局部变量中的a
cout<<"a = "<<veryLongName::a<<endl;//访问的是veryLongName的a
func();
}
3、using 指明使用命名空间中的具体成员。(了解)
注意:using直接使用 命名空间中的成员 会和 局部变量冲突

注意:using直接使用 命名空间中的成员 不会和 全局变量冲突
namespace veryLongName {
int a=100;
void func(){cout<<"hello namespace"<<endl;}
}
int a = 200;
void test07()
{
//using直接使用 命名空间中的成员 不会和 全局变量冲突
using veryLongName::a;
cout<<"命名空间中a = "<<a<<endl;//命名空间中的成员 100
cout<<"全局变量中a = "<<::a<<endl;//200
//但是func使用的时候 必须加作用域
veryLongName::func();
}
4、using声明碰到函数重载(了解)
namespace A {
//函数重载 函数名+参数 组合代表是函数的入口地址
void func(){cout<<" 无参的func"<<endl;}
void func(int a){cout<<" int的func"<<endl;}
void func(int a,int b){cout<<" int int的func"<<endl;}
}
void test08()
{
//using指明 使用 A中的func 会对 所有的func起作用
using A::func;
func();
func(10);
func(10,20);
}
运行结果:

5、不同命名空间中的 同名成员 使用的时候注意 二义性
namespace A {
int a = 10;
}
namespace B {
int a = 20;
}
void test09()
{
//此处的a 不知道是A还是B中a
//cout<<"a = "<<a<<endl;//err
//解决方法
cout<<"A::a = "<<A::a<<endl;//100
cout<<"B::a = "<<B::a<<endl;//200
}
总结:
1、命名空间的定义( 不能在 函数内 定义命名空间)
2、使用命名空间的成员 最安全的方式 命名空间名::成员名
3、using namespace 命名空间名;使用整个命名空间 (重要)
using namespace A;
4、单独 使用命名空间中的具体成员:using 命名空间名::成员名;
using A::a;
本文深入探讨C++中命名空间的使用,包括简化成员访问、使用整个命名空间、指定使用具体成员以及处理函数重载。同时,讲解了如何解决不同命名空间中同名成员的二义性问题。
3万+

被折叠的 条评论
为什么被折叠?



