我想创建一个方法get_name(...),它返回enum_value的名称。枚举值很少,但可以达到1 ^ 32 - 1(所以我不认为我可以使用数组映射)。
我做了以下事情:
const char* get_name(type_t x) {
static const char* name_1 = "NAME_FOR_TYPE_1";
static const char* name_2 = "NAME_FOR_TYPE_2";
...
static const char* invalid = "INVALID";
switch (x) {
case type_1: return name_1;
case type_2: return name_2;
...
}
return invalid;
}
然后,我被告知以下内容也有效:
const char* get_name(type_t x) {
switch (x) {
case type_1: return "NAME_FOR_TYPE_1";
case type_2: return "NAME_FOR_TYPE_2";
...
}
return "INVALID";
}
这是真的吗?它会一直有效吗?
我没有返回指向临时的指针吗?
答案 0 :(得分:13)
字符串文字存储为具有完整程序生命周期的数组。指向它们的指针永远不会失效。
所以做第二种选择是安全的,并没有涉及“临时”。