2015-06-11 117 views
3

我想在我的cpp文件的多個位置使用一個字符串常量。我應該使用std :: string還是char []?std :: string與靜態const的char數組

static const std::string kConstantString = "ConstantStringValue"; 

static const char kConstantString[] = "ConstantStringValue"; 

我被告知更喜歡後者,因爲它「避免靜態分配」。 char數組是否也必須靜態分配?

+0

我更喜歡'static const char []'的主要原因是爲了避免'std :: string'的對象指紋。你在處理這種嚴格的限制嗎? – 101010

+3

[This](http://stackoverflow.com/questions/1287306/difference-between-string-and-char-types-in-c)可以幫助你理解.....就個人而言,我會使用std ::字符串..... – ha9u63ar

+1

@ 101010:那,呃,什麼? 「物體指紋」?那是什麼? –

回答

7

是的,是的,它也必須靜態分配。

總是使用std::string,除非您的分析器告訴您,像const char[]這樣的遺留垃圾是值得推around的。選擇const char[]是一個比std::string更糟糕的微觀優化和愚蠢的決定,除非你確定這段代碼是一個熱路徑(因爲它是靜態的,無論我是否高度懷疑它)。

+5

Downvoted。使用'static const std :: string'是由於靜態初始化順序失敗而導致災難的祕訣,有人可能無意中在其他靜態常量中使用它。我真的看到它發生了幾次... – Synxis

4

簡單地定義一個指向這個字符串的指針:)它可以有靜態存儲區分符。

沒有任何需要使用class std :: string。它簡直是多餘而無用的。如果確實需要,這個常量可以轉換爲std :: string。

+1

除了_all你忘記/ ignored_,當然的原因。 –

0

由於它是static const,因此無論如何您都無法對此字符串進行任何操作,因此最好僅使用const char[]

+0

只讀'操縱'怎麼辦?像獲取長度或將它連接到另一個字符串之類的事情會更容易,如果可以使用'std :: string'函數而不是通過'strcat()'等等。當然,如果它只是一個標籤,不會被輸入任何操作,那麼'char'就可以了 - 但是我們不要簡單化(就像其他所有答案一樣...) –

相關問題