模块名称是否位于单独的 "name space" 中,或者它们是否会与例如模块冲突?变量名?
Does module names reside in a separate "name space", or could they collide with e.g. variable names?
我 guess/hope 模块名称不会与例如变量的名称。有人可以确认这一点,并可能参考(即将发布的)标准中的合适部分吗?
文件: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); }
很难引用否定的,但是是的 - 模块名称不能与 non-module 名称冲突。
我们在 C++ 中有许许多多种类的名称查找,但其中 none 考虑的是模块名称。就像语句 f(x);
可以找到许多名为 f
和 x
的东西,那些 ()
甚至可能意味着不同的东西,但它永远找不到 [=36] =]模块 命名为f
或x
。将模块命名为一个或另一个或两者都不会更改任何查找。
同样,在序言中,所有与module
相关的语句(import
、export
、模块声明或分区声明)仅考虑模块名称。如果你有类似的东西:
import M1;
import M2;
而 M1
恰好导出了一些名称 M2
,这不会破坏 M2
的后续 import
。具体来说,我们只是在寻找名为 M2
.
的 module
您不必担心这两者之间的冲突。
我 guess/hope 模块名称不会与例如变量的名称。有人可以确认这一点,并可能参考(即将发布的)标准中的合适部分吗?
文件: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); }
很难引用否定的,但是是的 - 模块名称不能与 non-module 名称冲突。
我们在 C++ 中有许许多多种类的名称查找,但其中 none 考虑的是模块名称。就像语句 f(x);
可以找到许多名为 f
和 x
的东西,那些 ()
甚至可能意味着不同的东西,但它永远找不到 [=36] =]模块 命名为f
或x
。将模块命名为一个或另一个或两者都不会更改任何查找。
同样,在序言中,所有与module
相关的语句(import
、export
、模块声明或分区声明)仅考虑模块名称。如果你有类似的东西:
import M1;
import M2;
而 M1
恰好导出了一些名称 M2
,这不会破坏 M2
的后续 import
。具体来说,我们只是在寻找名为 M2
.
module
您不必担心这两者之间的冲突。