namespace C++
2013-02-27 16:01
134 查看
namespace中文意思是命名空间或者叫名字空间,传统的C++只有一个全局的namespace,但是由于现在的程序的规模越来越大,程序的分工越来越细,全局作用域变得越来越拥挤,每个人都可能使用相同的名字来实现不同的库,于是程序员在合并程序的时候就会可能出现名字的冲突。namespace引入了复杂性,解决了这个问题。namespace允许像类,对象,函数聚集在一个名字下。本质上讲namespace是对全局作用域的细分。
我想大家都见过这样的程序吧:
hello_world.c
#include <iostream>
using namespace std;
int main()
{
printf("hello world !");
return 0;
}
我想很多人对namespace的了解也就这么多了
但是namespace远不止如此,让我们再多了解一下namespace
namespace的格式基本格式是
namespace identifier
{
entities;
}
举个例子,
namespace exp
{
int a,b;
}
有点类似于类,但完全是两种不同的类型。
为了在namespace外使用namespace内的变量我们使用::操作符,如下
exp::a
exp::b
使用namespace可以有效的避免重定义的问题
#include <iostream>
using namespace std;
namespace first
{
int var = 5;
}
namespace second
{
double var = 3.1416;
}
int main () {
cout << first::var << endl;
cout << second::var << endl;
return 0;
}
结果是
5
3.1416
两个全局变量都是名字都是var,但是他们不在同一个namespace中所以没有冲突。
在头文件中,我们通常坚持使用显式的限定,并且仅将using指令局限在很小的作用域中,这样他们的效用就会受到限制并且易于使用。类似的例子有
#include <iostream>
using namespace std;
namespace first
{
int x = 5;
}
namespace second
{
double x = 3.1416;
}
int main () {
{
using namespace first;
cout << x << endl;
}
{
using namespace second;
cout << x << endl;
}
return 0;
}
输出是
5
3.1416
可以看到两个不同的namespace都被限制在了不同作用域中了,他们之间就没有冲突。
namespace也支持嵌套
#include <iostream>
namespace first
{
int a=10;
int b=20;
namespace second
{
double a=1.02;
double b=5.002;
void hello();
}
void second::hello()
{
std::cout <<"hello world"<<std::endl;
}
}
int main()
{
using namespace first;
std::cout<<second::a<<std::endl;
second::hello();
}
输出是
1.02
hello world
在namespace first中嵌套了namespace second,seond并不能直接使用,需要first来间接的使用。
我想大家都见过这样的程序吧:
hello_world.c
#include <iostream>
using namespace std;
int main()
{
printf("hello world !");
return 0;
}
我想很多人对namespace的了解也就这么多了
但是namespace远不止如此,让我们再多了解一下namespace
namespace的格式基本格式是
namespace identifier
{
entities;
}
举个例子,
namespace exp
{
int a,b;
}
有点类似于类,但完全是两种不同的类型。
为了在namespace外使用namespace内的变量我们使用::操作符,如下
exp::a
exp::b
使用namespace可以有效的避免重定义的问题
#include <iostream>
using namespace std;
namespace first
{
int var = 5;
}
namespace second
{
double var = 3.1416;
}
int main () {
cout << first::var << endl;
cout << second::var << endl;
return 0;
}
结果是
5
3.1416
两个全局变量都是名字都是var,但是他们不在同一个namespace中所以没有冲突。
在头文件中,我们通常坚持使用显式的限定,并且仅将using指令局限在很小的作用域中,这样他们的效用就会受到限制并且易于使用。类似的例子有
#include <iostream>
using namespace std;
namespace first
{
int x = 5;
}
namespace second
{
double x = 3.1416;
}
int main () {
{
using namespace first;
cout << x << endl;
}
{
using namespace second;
cout << x << endl;
}
return 0;
}
输出是
5
3.1416
可以看到两个不同的namespace都被限制在了不同作用域中了,他们之间就没有冲突。
namespace也支持嵌套
#include <iostream>
namespace first
{
int a=10;
int b=20;
namespace second
{
double a=1.02;
double b=5.002;
void hello();
}
void second::hello()
{
std::cout <<"hello world"<<std::endl;
}
}
int main()
{
using namespace first;
std::cout<<second::a<<std::endl;
second::hello();
}
输出是
1.02
hello world
在namespace first中嵌套了namespace second,seond并不能直接使用,需要first来间接的使用。
相关文章推荐
- C++ 之namespace常见用法
- C++ namespace
- c++ 中的 namespace 用法 4000
- c++ primer plus阅读笔记10---定位new using namespace
- c++里面的namespace
- C++学习笔记之---namespace的使用
- C++ NAMESPACE
- C++ namespace总结
- C++ 命名空间namespace
- C++之Namespace使用源代码
- c++ 静态类成员函数(static member function) vs 名字空间 (namespace)
- [C++基础]002_名字空间(namespace)
- C++ 编译过程中报 error C2039: “div_t”: 不是“`global namespace'”的成员 的错误
- C++ namespace的用法
- C++ 工程实践(1):慎用匿名 namespace
- C++中的namespace
- c++ using namespace 详解
- c++ 之 namespace
- C++ namespace
- C++中的命令空间NameSpace定义和使用