如果你想用一个类包装一些枚举类型,例如,围绕它构建一些函数,你最终可能会遇到以下情况:
主.cpp:
#include "WrappedEnumConstants.h"
int main(int argc, char * argv[])
{
WrappedZero.print();
WrappedOne.print();
}
WrappedEnumConstants.h
#ifndef WRAPEDENUMCONSTANTS_H
#define WRAPEDENUMCONSTANTS_H
#include "WrappedEnum.h"
#include "InternalEnum.h"
static const WrappedEnum WrappedZero(ZeroEnum);
static const WrappedEnum WrappedOne(OneEnum);
#endif
WrappedEnum.h
#ifndef WRAPPEDENUM_H
#define WRAPPEDENUM_H
#include <iostream>
#include "InternalEnum.h"
class WrappedEnum
{
public:
WrappedEnum(InternalEnum a);
void print() const;
private:
InternalEnum a;
};
#endif
WrappedEnum.cpp
#include <iostream>
#include "WrappedEnum.h"
WrappedEnum::WrappedEnum(InternalEnum a) :
a(a)
{}
void WrappedEnum::print() const {
std::cout << "WrappedEnum: " << a << std::endl;
}
内部枚举.h
#ifndef INTERNALENUM_H
#define INTERNALENUM_H
enum InternalEnum { ZeroEnum, OneEnum};
#endif
我得到的输出与预期的一样:
WrappedEnum: 0
WrappedEnum: 1
我想知道静态常量 WrappedZero 和 WrappedOne 的初始化是否安全。ZeroEnum 和 OneEnum 的常量是否保证在 WrappedZero 和 WrappedOne 之前被初始化,还是我只是幸运?特别是,我想知道如果您在一个将许多东西链接在一起的大型项目中使用 WrappedEnum 可能会遇到什么陷阱。你有看到吗?
枚举常量(如 ZeroEnum 和 OneEnum)和全局“静态 const int”的初始化是否存在差异?