从模块导出全局常量的正确方法是什么?

Mik*_*ail 6 c++ c++20 c++-modules

声明全局常量可能很方便,但在 C++ 中并不容易。例如,请参阅Fluent C++ 最近的这篇文章。它主要解释了如何做到这一点,但没有提及 C++20 模块。

在命名空间级别的常规头文件中,我将声明一个如下常量:

// Constants.h
inline constexpr int Count = 42;
inline const std::vector<int> Numbers = { 1, 2, 3 };  // cannot use constexpr
Run Code Online (Sandbox Code Playgroud)

这里我需要inline,因为这些符号可能包含在多个翻译单元中。IIUC,导出符号的模块定义单元,是一个单独的翻译单元。所以我简单地声明如下:

// Constants.ixx
export module constants;

export constexpr int Count = 42;
export const std::vector<int> Numbers = { 1, 2, 3 };  // cannot use constexpr
Run Code Online (Sandbox Code Playgroud)

这是正确的做法,还是我错过了什么?

Dav*_*ing 2

你做对了。另请注意一个重要功能,即与 C++17 中一样,在 C++20 中通过约束初始化顺序(带或不带)inline来表达依赖关系。import inline