命名空间的定义是否可以跨越多个翻译单元

Can the definition of a namespace span multiple translation units?

本文关键字:翻译 单元 跨越 定义 是否 命名空间      更新时间:2023-10-16

我已经看到命名空间的定义被拆分到多个头文件中,头文件包含在一个文件中。例如,如何在多个文件中使用命名空间

命名空间的定义可以跨越多个翻译单元吗?

我正在比较C++中的命名空间和 Java 中的包。Java 中的包可以跨越多个翻译单元。

命名空间

没有声明和定义。声明和定义位于命名空间中。

翻译单元是经过预处理后获得的所有内容。特别是,预处理器包括源文件的头文件。

假设您有一个标头和两个带有命名空间的源文件。预处理后,从标头中获取命名空间跨越两个源文件。它将被编译。

因此,您可以在源文件之间拆分命名空间。

标题.h

namespace ns {
void f1();
void f2();
}

来源1.cpp

#include "header.h"
namespace ns {
void f1() {
}
}

来源2.cpp

#include "header.h"
namespace ns {
void f2() {
}
}

并停止比较C++和Java。它们有不同的基本概念。