模块名称是否驻留在单独的"name space"中,或者它们可能与例如变量名称发生冲突?

Does module names reside in a separate "name space", or could they collide with e.g. variable names?

本文关键字:变量名 冲突 是否 单独 模块 space name 或者      更新时间:2023-10-16

我猜/希望模块名称不会与例如变量名称发生冲突。有人可以确认这一点,也许可以参考(即将推出的(标准中的合适部分吗?

文件: a_module.cc

export module a_module;
export int add(int a, int b) { return a + b; }
// Question-1: Is using 'a_module' below as variable name allowed, or does
// the 'export module a_module' above prevent us from using that name?
int a_module = 11;

文件: main.cc

import a_module;
// Question-2: Is using 'a_module' below as variable name fine, or does the
// 'import a_module' above prevent us from using that name?
int a_module = 42;
int main() { return add(1, 2); }

很难引用否定,但是是的 - 模块名称不能与非模块名称冲突。

我们在C++中有很多种类的名称查找,但它们都不考虑模块名称。就像语句一样,f(x);可以找到许多名为 fx 的东西,这些()甚至可能意味着不同的东西,但它永远找不到名为 fx模块。将模块命名为一个或另一个或两者不会更改任何查找。

同样,在序言中,所有与module相关的语句(importexport、模块声明或分区声明(考虑模块名称。如果您有类似以下内容:

import M1;
import M2;

M1恰好导出了一些名称M2,这不会破坏M2的后续import。我们只在寻找,具体来说,module名为 M2 .

您不必担心这两件事之间的碰撞。