c++ namespace的使用
** namespace:命名空间就是为解决C++中的变量、函数的命名冲突而服务的。
** namespace定义的格式基本格式是:
namespace identifier
{
entities;
}
举个例子,
namespace exp
{
int a,b;
}
为了在namespace外使用namespace内的变量,使用::操作符,如下
exp::a
exp::b
使用namespace可以有效地避免重定义,
1 #include <iostream> 2 using namespace std; 3 4 namespace first 5 { 6 int var = 5; 7 } 8 9 namespace second 10 { 11 double var = 3.1416; 12 } 13 14 int main () { 15 cout << first::var << endl; 16 cout << second::var << endl; 17 return 0; 18 }
结果是:
5
3.1416
两个全局变量都是名字都是var,但是他们不在同一个namespace中所以没有冲突。
** using 关键字
关键字using可以帮助从namespace中引入名字到当前的声明区域,
1 #include <iostream> 2 using namespace std; 3 4 namespace first 5 { 6 int x = 5; 7 int y = 10; 8 } 9 10 namespace second 11 { 12 double x = 3.1416; 13 double y = 2.7183; 14 } 15 16 int main () { 17 using first::x; 18 using second::y; 19 cout << x << endl; 20 cout << y << endl; 21 cout << first::y << endl; 22 cout << second::x << endl; 23 return 0; 24 } 25 输出是 26 5 27 2.7183 28 10 29 3.1416 30 就如我们所指定的第一个x是first::x,y是second.y
using也可以导入整个的namespace,
1 #include <iostream> 2 using namespace std; 3 4 namespace first 5 { 6 int x = 5; 7 int y = 10; 8 } 9 10 namespace second 11 { 12 double x = 3.1416; 13 double y = 2.7183; 14 } 15 16 int main () { 17 using namespace first; 18 cout << x << endl; 19 cout << y << endl; 20 cout << second::x << endl; 21 cout << second::y << endl; 22 return 0; 23 } 24 输出是 25 5 26 10 27 3.1416 28 2.7183
** namespace也支持嵌套
1 #include <iostream> 2 3 namespace first 4 { 5 int a=10; 6 int b=20; 7 8 namespace second 9 { 10 double a=1.02; 11 double b=5.002; 12 void hello(); 13 } 14 15 void second::hello() 16 { 17 std::cout <<"hello world"<<std::endl; 18 } 19 } 20 21 int main() 22 { 23 using namespace first; 24 25 std::cout<<second::a<<std::endl; 26 second::hello(); 27 } 28 输出是 29 1.02 30 hello world
在namespace first中嵌套了namespace second,seond并不能直接使用,需要first来间接的使用。
** namespace 可以取别名
在对一些名字比较长的namespace使用别名的话,是一件很惬意的事。但是与using相同,最好避免在头文件使用namespace的别名(f比first更容易产生冲突)。
namespace f = first;