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

Can the definition of a namespace span multiple translation units?

我看到命名空间的定义被拆分成多个头文件,并且头文件包含在一个文件中。例如,How to use namespace across several files

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

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

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

翻译单元是经过预处理后得到的所有内容。特别是,预处理器将 header 个文件包含到源文件中。

假设您有一个 header 和两个带有命名空间的源文件。预处理后,您从 header 获得的命名空间跨越两个源文件。并且会被编译。

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

header.h

namespace ns {

void f1();
void f2();

}

source1.cpp

#include "header.h"

namespace ns {

void f1() {

}

}

source2.cpp

#include "header.h"

namespace ns {

void f2() {

}

}

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