【问题标题】:C++20 modules TS: still need function declaration?C++20 模块 TS:还需要函数声明吗?
【发布时间】:2019-04-17 20:47:30
【问题描述】:

我希望给那些尝试过 C++20 模块的人一个简短的小问题

根据TS,这段代码应该用C++20编译吗?

void f1() { f2(); }
void f2() { ... }

例如,在 C++11 中它不会编译,因为 f1() 不“知道” f2(),所以 f2() 必须在使用前声明。

但也许在 C++20 中这个要求会在模块中被消除?

如果第一个代码sn-p没有编译,这个会不会编译

void f1() { f2(); }
export void f2() { ... }

因为 f2() 会从 BMI 中看到?

【问题讨论】:

    标签: c++ module function-declaration c++20


    【解决方案1】:

    虽然 Modules 确实改变了关于名称查找的许多事情(我知道的最新论文是 P1103R1),但 Modules 不会改变 C++ 的基本属性,即必须在使用前声明名称(取模之类的东西,例如依赖的非限定调用- 这只是延迟了查找,但它仍然必须实际发生)。

    这个:

    void f1() { f2(); }
    export void f2() { ... }
    

    如果之前没有f2 的声明或者它不是从某个地方导入的,那么仍然会出现编译错误。你必须写:

    export void f2() { ... }
    void f1() { f2(); }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-02
      • 2019-07-14
      • 1970-01-01
      • 2023-03-19
      • 2013-01-31
      • 2010-11-27
      • 2021-06-25
      • 1970-01-01
      相关资源
      最近更新 更多