C++20 模块 TS:还需要函数声明吗?
C++20 modules TS: still need function declaration?
我希望对那些尝试过 C++20 模块的人提出一个快速的小问题
根据 TS,这段代码应该在 C++20 中编译吗?
void f1() { f2(); }
void f2() { ... }
例如,在 C++11 中它不会编译,因为 f1() 没有 "know" 关于 f2(),f2() 必须在使用前声明。
但也许在 C++20 中这个要求会在模块中被取消?
如果第一个代码片段没有编译,这个会编译吗
void f1() { f2(); }
export void f2() { ... }
因为f2()会从BMI看出来?
虽然模块确实改变了很多关于名称查找的事情(我知道的最新论文是 P1103R1),但模块不会改变 C++ 的基础 属性,即必须在名称之前声明名称使用(对诸如依赖的不合格调用之类的事物求模 - 这只会延迟查找,但它仍然必须实际发生)。
这个:
void f1() { f2(); }
export void f2() { ... }
如果之前没有声明 f2
或者它不是从某处导入的, 仍然会是一个编译错误。你必须写:
export void f2() { ... }
void f1() { f2(); }
我希望对那些尝试过 C++20 模块的人提出一个快速的小问题
根据 TS,这段代码应该在 C++20 中编译吗?
void f1() { f2(); }
void f2() { ... }
例如,在 C++11 中它不会编译,因为 f1() 没有 "know" 关于 f2(),f2() 必须在使用前声明。
但也许在 C++20 中这个要求会在模块中被取消?
如果第一个代码片段没有编译,这个会编译吗
void f1() { f2(); }
export void f2() { ... }
因为f2()会从BMI看出来?
虽然模块确实改变了很多关于名称查找的事情(我知道的最新论文是 P1103R1),但模块不会改变 C++ 的基础 属性,即必须在名称之前声明名称使用(对诸如依赖的不合格调用之类的事物求模 - 这只会延迟查找,但它仍然必须实际发生)。
这个:
void f1() { f2(); }
export void f2() { ... }
如果之前没有声明 f2
或者它不是从某处导入的,仍然会是一个编译错误。你必须写:
export void f2() { ... }
void f1() { f2(); }