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

时间:2017-10-07 00:24:51

标签: c++ namespaces programming-languages

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

想象一下,您有一个标头和两个带有命名空间的源文件。在预处理之后,您从头部获取命名空间跨越两个源文件。它将被编译。

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

<强> 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。他们有不同的基本概念。