【问题标题】:Does module names reside in a separate "name space", or could they collide with e.g. variable names?模块名称是否驻留在单独的“名称空间”中,或者它们是否会与例如冲突?变量名?
【发布时间】:2019-11-04 22:29:33
【问题描述】:

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

文件: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++ c++20 c++-modules


    【解决方案1】:

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

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

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

    import M1;
    import M2;
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-04
      • 2013-04-12
      • 2023-03-11
      • 2020-06-18
      • 1970-01-01
      • 2017-10-20
      • 2011-10-16
      • 2011-08-21
      相关资源
      最近更新 更多