C++ 命名空间
C++ 应用程序中。例如,您可能会写一个名为 func() 的函数,在另一个可用的库中也存在一个相同的函数 func()。这样,编译器就无法判断您所使用的是哪一个 func() 函数。
因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。
定义命名空间
命名空间的定义使用关键字 namespace,后跟命名空间的名称,如下所示:
为了调用带有命名空间的函数或变量,需要在前面加上命名空间的名称,如下所示:
name::code; // code 可以是变量或函数,name是命名空间的名字
eg:
#define _CRT_SECURE_NO_WARNINGS#include<iostream> namespace space_test1 {typedef int T;int a = 1000;void fuc(void){std::cout << "I am space_test1 \n";} }namespace space_test2 {typedef double T;int a = 100;void fuc(void){std::cout << "I am space_test2\n";} } int main() {//通过命名空间的不同,可以使用相同的函数,变量,类型space_test2::T high = 1.1;space_test1::T age = 25;space_test2::fuc();space_test1::fuc();std::cout << "high=" << high << std::endl;std::cout << "age="<< age<<std::endl;std::cout << "space_test1::a=" << space_test1::a << std::endl;std::cout << "space_test2::a=" << space_test2::a << std::endl;system("pause");return 0; }
using 指令
您可以使用 using namespace 指令,这样在使用命名空间时就可以不用在前面加上命名空间的名称。这个指令会告诉编译器,后续的代码将使用指定的命名空间中的名称。
为什么我们不推荐using namespace ...的做法:
命名空间使用这样直接的声明,破坏了它想要解决的同名函数,变量,类等问题,虽然在不引起二义性的情况下,我们会方便一些,因为可以少输入几个字符,但是,在不能保证是否有相同函数,变量,类的情况下,还是使用命名空间前缀更合适。