C++ 使用枚举索引数组是否安全?

C++ 使用枚举索引数组是否安全?,c++,qt,enums,C++,Qt,Enums,使用枚举索引数组是否安全? 例如: void messageToCerr( QtMsgType type, const QMessageLogContext& context, const QString& msg ) { QVector<QString> typeName = {"Debug", "Warning", "Critical", "Fatal", "Info"};

使用枚举索引数组是否安全? 例如:

void messageToCerr( QtMsgType type,
                const QMessageLogContext& context,
                const QString& msg
              ) {
QVector<QString> typeName = {"Debug", "Warning", "Critical", "Fatal", "Info"};
QString output = QString( "[%1] %2" ).arg( typeName.at(type) ).arg( msg );
std::cerr << output.toStdString() << std::endl;
if ( type == QtMsgType::QtFatalMsg ) {

    abort();
}
像一个数组向量索引是安全的吗?
我了解到遍历类枚举数组是不安全的。

是的,根据定义,您所做的是安全的,但我建议在创建枚举时声明/定义向量。比如:

enum QtMsgType { QtDebugMsg, QtInfoMsg, QtWarningMsg, QtCriticalMsg, QtFatalMsg, QtSystemMsg };
QVector<QString> typeName = {"Debug", "Warning", "Critical", "Fatal", "Info"};

另一种选择是重载旁注对于固定大小的列表,使用QVector这样的可重新调整大小的数据结构没有多大价值。我会添加一个QtMsg_Last或类似于枚举中的最后一个条目。这为您提供了一个易于在边界检查中使用的值,以及一个用作std::array.Good call@user大小的常量。我在中编辑了阵列实现。
enum QtMsgType { QtDebugMsg, QtInfoMsg, QtWarningMsg, QtCriticalMsg, QtFatalMsg, QtSystemMsg };
QVector<QString> typeName = {"Debug", "Warning", "Critical", "Fatal", "Info"};
enum QtMsgType { QtDebugMsg, QtInfoMsg, QtWarningMsg, QtCriticalMsg, QtFatalMsg, QtSystemMsg };
QString typeName[] = {"Debug", "Info", "Warning", "Critical", "Fatal"};