我猜/希望模块名称不会与例如变量名称。有人可以确认这一点,也许可以参考(即将发布的)标准中的适当部分?
文件: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); }
答案 0 :(得分:3)
很难否认,但是是的-模块名称不能与非模块名称冲突。
在C ++中,我们有很多种类的名称查找,但是它们都不考虑模块名称。像语句f(x);
可以找到许多名为f
和x
的事物,而这些()
甚至可能意味着不同的事物,但是它找不到名为f
或x
的模块。将模块命名为一个或另一个或两个都不会更改任何查找。
同样,在序言中,所有与module
相关的语句(import
,export
,模块声明或分区声明)仅 考虑模块名称。如果您有类似的东西:
import M1;
import M2;
然后M1
导出了一个名称M2
,不会破坏import
的后一个M2
。具体来说,我们只在寻找名为module
的{{1}}个。
您不必担心这两件事之间的冲突。