【发布时间】:2020-12-11 13:41:36
【问题描述】:
我在我的 c++ 项目中编写了一个小帮助函数,它应该将 enum 的值转换为预定的字符串列表。我是这样写的:
#include <stdint.h>
#include <iostream>
enum things{
val1 = 0,
val2,
val3,
val4
};
constexpr const char* things_strings[4] = {"A", "B", "C", "D"};
constexpr const char* get_thing_string(const things thing){
return things_strings[static_cast<uint32_t>(thing)];
}
int main(){
std::cout << get_thing_string(things::val1);
std::cout << get_thing_string(static_cast<things>(12));
}
我预计这会导致编译失败。我认为通过使用constexpr 可以防止在编译期间出现索引越界问题。有没有办法在 C++ 11 中强制执行此操作?
【问题讨论】:
-
以后除了用特定语言版本打标签外,还会用c++打标签。这样会有更多可以回答问题的用户看到它。