声明全局常量可能很方便,但是在C ++中并不容易。例如。参见this recent article at Fluent C++。它主要说明了如何执行此操作,但未提及C ++ 20模块。
在命名空间级别的常规头文件中,我将这样声明一个常量:
// Constants.h
inline constexpr int Count = 42;
inline const std::vector<int> Numbers = { 1, 2, 3 }; // cannot use constexpr
在这里我需要inline
,因为这些符号可能包含在多个翻译单元中。 IIUC,输出符号的模块定义单元是一个单独的转换单元。因此,我将其简单声明如下:
// Constants.ixx
export module constants;
export constexpr int Count = 42;
export const std::vector<int> Numbers = { 1, 2, 3 }; // cannot use constexpr
这是正确的做法吗,还是我错过了什么?
答案 0 :(得分:2)
您做对了。还要注意一个重要的功能,例如C ++ 17中的inline
,在C ++ 20中是通过import
constrain initialization order(带有或不带有inline
)表示的依赖项。>