cpp►命名空间namespace

Posted itzyjr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cpp►命名空间namespace相关的知识,希望对你有一定的参考价值。


你可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数 xyz()。这样,编译器就无法判断您所使用的是哪一个 xyz() 函数。

因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。

我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。

定义和使用命名空间
#include <iostream>
using namespace std;
// 第一个命名空间
namespace first_space {
    void func() {
        cout << "Inside first_space" << endl;
    }
}
// 第二个命名空间
namespace second_space {
    void func() {
        cout << "Inside second_space" << endl;
    }
}
int main() {
    first_space::func();// 调用第一个命名空间中的函数
    second_space::func();// 调用第二个命名空间中的函数
    return 0;
}
Inside first_space
Inside second_space
Using指令

这个指令会告诉编译器,后续的代码将使用指定的命名空间中的名称。

#include <iostream>
using namespace std;
using namespace first_space;
// 第一个命名空间
namespace first_space {
    void func() {
        cout << "Inside first_space" << endl;
    }
}
// 第二个命名空间
namespace second_space {
    void func() {
        cout << "Inside second_space" << endl;
    }
}
int main() {
    func();// 调用第一个命名空间中的函数
    return 0;
}
Inside first_space
不连续的命名空间

命名空间可以定义在几个不同的部分中,因此命名空间是由几个单独定义的部分组成的。一个命名空间的各个组成部分可以分散在多个文件中

所以,如果命名空间中的某个组成部分需要请求定义在另一个文件中的名称,则仍然需要声明该名称。下面的命名空间定义可以是定义一个新的命名空间,也可以是为已有的命名空间增加新的元素:

namespace namespace_name {
	// 代码声明
}
嵌套的命名空间
namespace ns1 {
	// 代码声明
	namespace ns2 {
		// 代码声明
	}
}
using namespace ns1::ns2;// 访问ns2中的成员
using namespace ns1;// 访问ns1中的成员
#include <iostream>
using namespace std;
// 第一个命名空间
namespace first_space {
    void func() {
        cout << "Inside first_space" << endl;
    }
    // 第二个命名空间
    namespace second_space {
        void func() {
            cout << "Inside second_space" << endl;
        }
    }
}
using namespace first_space::second_space;
int main() {
    func();// 调用第二个命名空间中的函数
    return 0;
}
Inside second_space

以上是关于cpp►命名空间namespace的主要内容,如果未能解决你的问题,请参考以下文章

关于命名空间namespace

PHP 命名空间(namespace)

18PHP 命名空间(namespace)

php中的namespace 命名空间

PHP 命名空间(namespace)

类名可以用作命名空间吗?