定义命名空间
有两种形式的命名空间——有名的和无名的。
命名空间的定义格式为:(取自C++标准文档)
named-namespace-definition:
namespace identifier { namespace-body }
unnamed-namespace-definition:
namespace { namespace-body }
namespace-body:
declaration-seqopt
--------------------------------------------------
有名的命名空间:
namespace 命名空间名 {
声明序列可选
}
无名的命名空间:
namespace {
声明序列可选
}
-------------------------------------------------
命名空间的成员,是在命名空间定义中的花括号内声明了名称。可以在命名空间的定义内,定义命名空间 的成员(内部定义)。也可以只在命名空间的定义内声明成员,而在命名空间的定义之外,定义命名空间的成员(外部定义)。
命名空间成员的外部定义的格式为:
命名空间名::成员名 ……
例如:
// out.h
namespace Outer { // 命名空间Outer的定义
int i; // 命名空间Outer的成员i的内部定义
namespace Inner { // 子命名空间Inner的内部定义
void f() { i++; } // 命名空间Inner的成员f()的内部定义,其中的i为Outer::i
int i;
void g() { i++; } // 命名空间Inner的成员g()的内部定义,其中的i为Inner::i
void h(); // 命名空间Inner的成员h()的声明
}
void f(); // 命名空间Outer的成员f()的声明
// namespace Inner2; // 错误,不能声明子命名空间
}
void Outer::f() {i--;} // 命名空间Outer的成员f()的外部定义
void Outer::Inner::h() {i--;} // 命名空间Inner的成员h()的外部定义
// namespace Outer::Inner2 {} // 错误,不能在外部定义子命名空间
注意:
不能在命名空间的定义中声明(另一个嵌套的)子命名空间,只能在命名空间的定义中定义子命名空间。
也不能直接使用“命名空间名::成员名 ……”定义方式,为命名空间添加新成员,而必须先在命名空间的定义中添加新成员的声明。另外,命名空间是开放的,即可以随时把新的成员名称加入到已有的命 名空间之中去。方法是,多次声明和 定义同一命名空间,每次添加自己的新成员和名称。例如:
namespace A {
int i;
void f();
} // 现在A有成员i和f()
namespace A {
int j;
void g();
} // 现在A有成员i、f()、j和g()
还可以用多种方法,来组合现有的命名空间,让它们为我所用。例如:
namespace My_lib {
using namespace His_string;
using namespace Her_vector;
using Your_list::List;
void my_f(String &, List &);
}
……
using namespace My_lib;
……
Vector<String> vs[5];
List<int> li[10];
my_f(vs[2], li[5]);
使用命名空间
作用域解析运算符(::)
对命名空间中成员的引用,需要使用命名空间的作用域解析运算符::。例如:
// out1.cpp
#include "out.h"
#include <iostream>
int main ( ) {
Outer::i = 0;
Outer::f(); // Outer::i = -1;
Outer::Inner::f(); // Outer::i = 0;
Outer::Inner::i = 0;
Outer::Inner::g(); // Inner::i = 1;
Outer::Inner::h(); // Inner::i = 0;
std::cout << "Hello, World!" << std::endl;
std::cout << "Outer::i = " << Outer::i << ", Inner::i = " << Outer::Inner::i << std::endl;
}using指令(using namespace)
为了省去每次调用Inner成员和标准库的函数和对象时,都要添加Outer::Inner::和 sta::的麻烦,可以使用标准C++的using编译指令来简化对命名空间中的名称的使用。格式为:
using namespace 命名空间名[::命名空间名……];
在这条语句之后,就可以直接使用该命名空间中的标识符,而不必写前面的命名空间定位部分。因为 using指令,使所指定的整个命名空间中的所有成员都直接可用。例如:
// out2.cpp
#include "out.h"
#include <iostream>
// using namespace Outer; // 编译错误,因为变量i和函数f()有名称冲突
using namespace Outer::Inner;
using namespace std;
int main ( ) {
Outer::i = 0;
Outer::f(); // Outer::i = -1;
f(); // Inner::f(),Outer::i = 0;
i = 0; // Inner::i
g(); // Inner::g(),Inner::i = 1;
h(); // Inner::h(),Inner::i = 0;
cout << "Hello, World!" << endl;
cout << "Outer::i = " << Outer::i << ", Inner::i = " << i << endl;
}
相关推荐
在C++编程语言中,命名空间(namespace)是一种组织代码的方式,它可以帮助避免名字冲突问题。当多个程序或库在同一个程序中使用相似的变量名或函数名时,命名空间可以将这些元素分隔开,使得相同的名字在不同的命名...
C++namespace的用法.pdf
namespace命名空间是C++中一个非常重要的概念,本文实例展示了namespace的相关语法,供大家参考。具体如下: 本段测试代码包括如下内容: (1) 如何访问namespace中声明的名称; (2) namespace导致的相关冲突; (3) ...
│ NAMESPACE_STD.CPP C/C++ NAMESPACE_STD 中的关键字和标准库 及 常用WINAPI │ NAMESPACE_STD_ADN_wxKEY.CPP 由于CodeBlocks用户关键字最大支持30K,所以这个是 wx库常用API │ 说明.txt 本说明文件
C++Namespace::IServiceServer* pService = new C++Namespace::IServiceServer(); pService->doSomething(parameters); ``` 这里的`parameters`是传递给Java方法的参数。在调用方法后,记得释放对象。 2.2.3 监视...
### C++命名空间(namespace)详解 #### 命名空间概览 在C++编程语言中,`namespace`(命名空间)是一个关键的概念,用于管理标识符的作用域,避免命名冲突,尤其是在大型项目和库使用场景下。命名空间提供了一种...
在C++编程语言中,命名空间(namespace)是一种组织代码的重要机制,它的主要目的是解决标识符的命名冲突问题。在大型项目或者多个库之间,不同的开发者可能会使用相同的名字来定义变量、函数或类,这就会导致编译...
很好的一本C++较少名称空间和作用域的书籍,让你更加了解名称空间的机制。。。。
C++命名空间(namespace)是C++编程语言中一个重要的特性,它的主要目的是为了帮助解决在大型项目中可能出现的名称冲突问题。当多个模块或库使用相同的标识符时,命名空间提供了一种方法,使得相同名称的标识符可以...
在C++编程语言中,`using namespace std` 是一个经常使用的指令,它涉及到命名空间(namespace)的概念,这是C++为了解决标识符冲突和组织代码结构而引入的一个关键特性。本文将深入探讨`using namespace std`的作用...
在C++中,`namespace`是一个重要的概念,它用于解决命名冲突问题,提高代码的可读性和可维护性。本课件将深入探讨`namespace`的作用、用法以及与之相关的生命周期和生成期。 `namespace`是C++中的一个命名空间,它...
在C++编程语言中,`namespace` 是一个重要的组织代码的工具,它允许程序员在一个命名空间内定义标识符(如变量、函数、类等),而不会与其他命名空间内的相同标识符冲突。`namespace` 提供了一种避免全局作用域污染...
在C++编程语言中,`namespace` 是一个重要的组织工具,它用于避免命名冲突,使得在大型项目中可以更好地管理代码。本篇文章将深入探讨C++中的`namespace`概念、用法及其重要性。 首先,我们需要理解`namespace`的...
### C++ 中 `using namespace std` 的详细解析 #### 一、引言 在现代C++编程中,理解和掌握命名空间(namespace)的概念至关重要。本文旨在深入探讨C++中`using namespace std`的意义及其背后的原理,并解释`...
using namespace std; namespace A { void fun() { printf(aaa\n); } } namespace B { void fun() { printf(bbb\n); } } int main() { fun(); return 0; } 编译出错:error: ‘fun' was not declared in this ...
在C++编程语言中,名空间(namespace)是一种重要的特性,其主要目的是解决标识符(如类、对象、函数等)的命名冲突问题。当多个库或模块使用相同的标识符时,名空间允许程序员在不引起冲突的情况下复用这些名称。...
- **文件扩展名**:通常,C++源代码文件使用`.cc`扩展名,而头文件使用`.h`扩展名。此外,还存在`.inc`和`-inl.h`等特定类型的文件扩展名,其中`.inc`用于实现文件,而`-inl.h`用于内联函数的定义。 - **路径与...
在C++编程语言中,`namespace` 是一个重要的组织代码的工具,它允许程序员将相关的函数、类和其他标识符分组到逻辑单元中,避免命名冲突。`namespace` 的概念在大型项目中尤为重要,因为随着代码量的增加,可能会...