2017-04-19 37 views
3

我想創建一個方法get_name(...),它返回一個enum_value的名字。枚舉值很少,但可以高達1^32 - 1(所以我不認爲我可以使用數組映射)。返回一個臨時的const char * - 它會起作用

我做了以下內容:

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

字符串文字被存儲爲具有完整程序生命週期的數組。指向他們的指針永遠不會失效。

因此,做第二種選擇是安全的,並且不涉及「臨時」。

相關問題