[英]Implicit class instantiations translation units: multiple definition when linking
[英]Can the definition of a namespace span multiple translation units?
我已经看到了命名空间的定义被拆分为多个头文件,并且头文件包含在一个文件中。 例如, 如何在多个文件中使用名称空间
命名空间的定义可以跨多个翻译单元吗?
我正在将C ++中的名称空间与Java中的程序包进行比较。 Java包可以跨越多个翻译单元。
命名空间没有声明和定义。 声明和定义在名称空间中。
翻译单元是您经过预处理后得到的所有内容。 特别地,预处理器包括源文件的头文件。
假设您有一个标头和两个带有名称空间的源文件。 预处理后,您将从头跨越两个源文件获取名称空间。 它将被编译。
因此,您可以在源文件之间拆分名称空间。
头文件
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。 它们具有不同的基本概念。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.