Namespaces (C++)

来源:互联网 发布:淘宝店铺优惠券怎么用 编辑:程序博客网 时间:2024/05/17 03:35
Namespaces (C++)

The C++ language provides a single global namespace. This can cause problems with global name clashes. For instance, consider these two C++ header files:

Copy
char func(char);class String { ... };// somelib.hclass String { ... };

With these definitions, it is impossible to use both header files in a single program; the String classes will clash.

A namespace is a declarative region that attaches an additional identifier to any names declared inside it. The additional identifier makes it less likely that a name will conflict with names declared elsewhere in the program. It is possible to use the same name in separate namespaces without conflict even if the names appear in the same translation unit. As long as they appear in separate namespaces, each name will be unique because of the addition of the namespace identifier. For example:

Copy
namespace one {   char func(char);   class String { ... };}// somelib.hnamespace SomeLib {   class String { ... };}

Now the class names will not clash because they become one::String and SomeLib::String, respectively.

C++ does not allow compound names for namespaces.

Copy
// pluslang_namespace.cpp// compile with: /c// OKnamespace a {   namespace b {      int i;   }}// not allowednamespace c::d {   // C2653   int i;}

Declarations in the file scope of a translation unit, outside all namespaces, are still members of the global namespace.

原创粉丝点击