3

我猜/希望模块名称不会与变量名称冲突。有人可以证实这一点,并可能参考(即将发布的)标准中的合适部分吗?

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

1 回答 1

3

很难举一个否定的例子,但是是的 - 模块名称不能与非模块名称冲突。

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

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

import M1;
import M2;

并且M1恰好导出了一些名称,M2这不会破坏import. M2我们只是在寻找,具体来说,modules named M2

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

于 2019-06-22T13:31:56.633 回答