C++命名空间
命名空间的概念
命名空间的应用
① 使用
②使用
在程序设计时,要求同一程序在全局作用域中声明的每个变量,函数,类型,常量等都必须具有唯一的名称,如有重复,就会产生命名冲突。程序员不一定对系统的全部库函数名和全局变量符号都熟悉,容易定义与系统已有名称重复的变量名。另外,如果一个程序由许多程序员共同编写,彼此并不知道对方定义的标识符名称,回名在所难免,诸如此类原因还有很多,如在程序中引入另一个系统或第三方软件商提供的库文件,它们定义的全局名称(如全局变量,函数、类型等的名称)也容易与当前程序的已有名称相同,上述情况引发的名字冲突问题称为全局命名空间污染问题,处理起来并不容易,在大型程序中尤其困难,C标准引入命名空间来解决此问题。
命名空间就是每个程序员或每个不同的函数库各自独立地定义的一个名称,将自己设计的全部对象(包括变量,函数、类型、类等)都包含在此名称之下。这样,每个变量的全名就是“命名空间对象名称”,只要命名空间不同名,就能够有效地区分程序中的同名变量。
命名空间定义
// 命名空间定义句法:
namespace name {
members;
}namespace ABC {
int count;
typedef float, house_price;
struct student {
char* name;
int age;
};
double add(int a, int b) { return (double)a + b; }
inline int min(int a, int b);
};
int ABC::min(int a, int b) { return a > b ? a : b; }命名空间的应用
void main() {
ABC::count = 1; // 访问ABC空间中的count
int count = 9; // 这是main函数中的局部变量count,与ABC中的count无关
ABC::student s; // 使用ABC中的结构体定义变量
s.age = 9;
int x = ABC::min(4, 5); // 调用命名空间ABC中的函数min()
}① 使用
using namespace_name::identifier引用命名空间的单个成员。void main() {
using ABC::count;
// 引用命名空间ABC中的count,引用之后,就不用在count前面加上ABC::了
count = 2;
// int count = 9;
count = count + 2;
}②使用
using namespace ABC引用命名空间的全部成员。using namespace ABC;
void main() {
int count = 9; // 已引入了ABC中定义的count,这是重复定义
student s;
count = 5;
s.age = min(43, 32);
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!