命名空间的定义是否可以跨越多个翻译单元
Can the definition of a namespace span multiple translation units?
我已经看到命名空间的定义被拆分到多个头文件中,头文件包含在一个文件中。例如,如何在多个文件中使用命名空间
命名空间的定义可以跨越多个翻译单元吗?
我正在比较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。它们有不同的基本概念。
相关文章:
- 不同翻译单元中不可重载的非内联函数定义
- 为什么未命名的结构内联变量在每个翻译单元中没有相同的地址?
- 如何执行 cppcheck 交叉翻译单元 (CTU) 静态分析?
- 模板变量是否允许在多个翻译单元中并有效合并?
- 是否允许类在程序中的不同翻译单元之间具有不同的定义?
- 为什么具有静态存储持续时间的同一内联变量在包含在 VS2017 编译的两个翻译单元中时会构造和销毁两次
- 为什么不同的翻译单元没有独立和沙盒的内存空间?
- 为什么编译器不在同一翻译单元中警告 ODR 违规
- 静态变量在同一个翻译单元中被静态方法使用时是否保证被初始化?
- 来自不同翻译单元的函数会干扰吗?
- 如何在C++中的不同翻译单元之间共享枚举的实例
- 在C++中声明"interface",而不是将其 vtable 发送到每个翻译单元
- MSVC 2017 在单个翻译单元中违反静态初始化顺序
- 在不同的翻译单元中启动全局变量(涉及链接)
- 链接器如何处理跨翻译单元的相同模板实例化
- 在不同翻译单元中具有静态存储持续时间的依赖非局部常量浮点变量的常量初始化
- 翻译单元的数量与CPP文件的数量
- GCC 6.3.0 中的 ODR 冲突,类型在两个单独的翻译单元中定义
- 为什么结构和类定义可以在多个翻译单元上重复?
- 如果在同一翻译单元中调用功能,为什么需要搬迁