2017-02-20 34 views
0

我正在編寫代碼,其中根據用戶輸入執行代碼的不同部分。如果我確定用戶只輸入一個字符,字符串或字符將佔用更多的內存嗎?這種方式還有其他優點嗎?C++:什麼佔用更多的內存,將單個字符存儲爲字符或字符串?

編輯: 這裏是我的意思的例子:

using namespace std; 
char operation;//or string 
cout << "enter the operator (+/=):" << endl; 
cin >> operation; 
if (operation == '+') { 
//do something 
} 
else { 
//do something else 
} 
+1

請過帳一些代碼? –

+0

將整個'std :: string'推到一個孤獨的單個'char'中是相當困難的。 –

+1

您是否有任何理由認爲應用程序內存不足?如果沒有,做任何更容易的事情。 –

回答

2

什麼需要更多的內存,將單個字符存儲爲字符或字符串?

char定義爲系統上最小可尋址存儲單元的大小。因此沒有任何物體可以佔用較少的記憶。

字符串是一個字符序列。單個元件的陣列恰恰一樣多存儲器爲單個元件:

char c = 'a'; 
char str[] = {'a'}; 
assert(sizeof c == sizeof str); 

然而,一個字符串的大多數用途要求字符串由空字符結束。只有一個包含空終止符的字符串,並且適合單字符數組:空字符串。

因此,除非用戶輸入的字符爲空,否則該字符串必須使用比單個字符更多的內存 - 如果您需要它以null結尾。


如果你正在考慮std::string,包含了幾個三分球(比在大多數系統中一個字節大)除了包含字符本身的緩衝區。 (雖然實現可以被優化,使得沒有爲小字符串分配外部緩衝區)

其中一個優於另一個嗎?

std::string超過char的主要優點是,前者可以表示任意長度的字符串,而不是單個人物。

3

一個char需要一個字節。
std::string需要至少sizeof(std::string)字節,這在現代PC上可能是24字節。

在你的情況下,保存的內存很可能並不重要(因爲保存會非常少,大概23個字節),所以你應該堅持最好地描述你的意圖。如果你需要一個字符,那麼一個單一的char將是合理的。

+0

'sizeof(std :: string)== 28'在我的機器上(VC++ 2015) – zett42

+0

其中一個優於另一個嗎? (例如性能?) – kyczawon

+0

@kyczawon'char'很可能會更快。 – emlai

相關問題