命名空间 using 和 using namespace 使用详解
阅读前须知:
注:本文中所说的属性泛指 类,函数,变量。
1.using namespace 使用命名空间(命名空间内属性直接使用,范围)
使用形式:using namespace + 命名空间名;
详见下面代码分析:
#include<iostream>
namespace A{
void A1(){ std::cout << "我是A1" << std::endl; };
class B{
public:
static void B1(){ std::cout << "我是B1"<<std::endl; };
void B2(){ std::cout << "我是B2" << std::endl; };
};
namespace C{
void C1(){ std::cout << "我是C1" << std::endl; };
}
}
int main(){
using namespace A; //可访问命名空间A下的所有属性
//访问A1
A1();
//访问B1,B2
B::B1();
//B::B2(); //error,不可访问,B2不是B类的静态函数,需先创建B类对象,再调用B2;
//访问C1
C::C1();
//C1(); //error
using namespace A::C; //可访问命名空间B下的所有属性
C1();
std::cin.get();
}
2.using 使用命名空间下的某一个属性(特指)
使用形式:using + 命名空间名 :: 属性;
详见下面代码分析:
#include<iostream>
namespace A{
void A1(){ std::cout << "我是A1" << std::endl; };
class B{
public:
static void B1(){ std::cout << "我是B1"<<std::endl; };
void B2(){ std::cout << "我是B2" << std::endl; };
};
namespace C{
void C1(){ std::cout << "我是C1" << std::endl; };
}
}
int main(){
//访问A1
using A::A1;
A1();
//访问B1,B2
using A::B;
B::B1();
//B::B2(); //error,不可访问,B2不是B类的静态函数,需先创建B类对象,再调用B2;
//访问C1
using A::C::C1;
C1();
std::cin.get();
}
注:
1. using A::C::C1 ;其中A,C一定是命名空间名,C1一定是属性。(使用using必须以属性结尾,其它必须是命名空间名)
2. using namespace A ;A一定是命名空间名。
友情提示:不管使用using 还是using namespace 都最好限定其使用的范围。你应参考以下几点。
1.不把using 或 using namespace放在全局空间内;
2.尽量放入函数体内,代码块内;
3.不使用using 和 using namespace (代码更加清晰)。