namespace 的作用
namespace用于分割项目整个空间,使每一个空间相对独立,虽然相同的名字存在,但是他们处于不同的namespace中,就不会发生命名冲突。
全局作用域最大的问题是只有一个。在一个大型项目中,人们经常会重复命名从而导致命名冲突。
例子:
library1.h might define a number of constants, including the following:
const double LIB_VERSION = 1.204;
Ditto for library2.h:
const int LIB_VERSION = 3;
使用方法
- 加载所有标识符
#include
#include
using namespace std;
- 仅加载一个标识符
using std::cout;
- 直接指定标识符
std::cout << 10 << std::endl;
无名命名空间
无名命名空间定义是具有下列形式的命名空间定义
inline(可选) namespace attr(可选) { 命名空间体 }
例子:
namespace Test //(attr optional)
{
int a;
void f(){/*...*/}
}
以上例子等价于
namespace Test //(attr optional)
{
int a;
void f(){/*...*/}
}
using namespace Test;
使用无名命名空间的好处是外部环境将无法说出无名命名空间的成员名字,即不让外界知道我的内部成员及调用。及如果attr没有定义则外部环境无法知道命名空间的名字。
如果不支持namespace,可以使用struct来模仿
struct lib {
const double LIB_VERSION;
};
const double lib::LIB_VERSION = 2.0;
人们可以通过struct name调用
void f()
cout << lib::LIB_VERSION;
}
参考资料:
- Effective C++ 2nd edition
- https://blog.youkuaiyun.com/y396397735/article/details/47835341
- https://blog.youkuaiyun.com/Bruce_0712/article/details/53644809