C ++ 20模块TS:仍然需要函数声明吗?

时间:2018-11-14 19:49:48

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

我希望对那些尝试过C ++ 20模块的人来说是一个简短的问题

根据TS,此代码应在C ++ 20中编译吗?

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

例如,在C ++ 11中它将不会编译,因为f1()并不“了解” f2(),因此必须在使用前声明f2()。

但是也许在C ++ 20中,此要求将在模块中消除?

如果第一个代码段未编译,则将其编译

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

因为从BMI中可以看到f2()?

1 个答案:

答案 0 :(得分:6)

虽然模块确实改变了许多有关名称查找的内容(我知道的最新论文是P1103R1),但是模块不会改变C ++的基本属性,即必须在使用之前声明名称(诸如模不合格的呼叫-只是延迟了查找,但实际上仍必须进行。)

此:

void f1() { f2(); }
export void f2() { ... }
如果没有先前的f2声明或不是从某个地方导入的,

仍将是编译错误。您必须写:

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