模块名称是否驻留在单独的“名称空间”中,或者它们可能与例如变量名?

时间:2019-06-22 09:09:45

标签: c++ c++20 c++-modules

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

文件: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); }

1 个答案:

答案 0 :(得分:3)

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

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

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

import M1;
import M2;

然后M1导出了一个名称M2,不会破坏import的后一个M2。具体来说,我们只在寻找名为module的{​​{1}}个。

您不必担心这两件事之间的冲突。