[英]Different ways to make a string?
我是c ++的新手,我想從一開始就知道,
這些制作字符串的方法中的任何一種是否在每種情況下始終以完全相同的方式工作並給出完全相同的結果? 它們之間的結果有什么不同嗎?
1) char greeting [6] = { 'h','e','l','l','o','\0' };
2) char greeting[] = "hello";
3) #include <string>
string greeting = "hello";
1)和2)完全相同。 兩者都創建一個6元素的非堆分配數組,並在運行時或加載時將字符'h'
, 'e'
, 'l'
, 'l'
, 'o'
, '\\0'
復制到數組中。
3)創建一個std::string
實例,並調用其構造函數,該構造函數將字符'h'
, 'e'
, 'l'
, 'l'
, 'o'
(, '\\0'
)*復制到其內部內存緩沖區。 (*不需要將'\\0'
存儲在內存緩沖區中。)
在C ++中還有另一種使用char
的指針聲明字符串的方法:
const char* greeting = "hello";
這不會復制任何內容。 它只會將指針指向位於內存中某個位置的以空終止的"hello"
字符串的第一個字符'h'
。 該字符串也是只讀的(修改它會導致未定義的行為),這就是為什么這里應該使用指向const
的指針的原因。
如果您想使用哪個,請選擇std::string
,這是最安全,最簡單的方法。
這些制作字符串的方法是否以完全相同的方式工作,並在每種情況下始終給出完全相同的結果?
前兩個是數組定義:
char greeting [6] = { 'h','e','l','l','o','\0' };
char greeting [ ] = "hello";
與第二個定義中的'\\0'
相同” ,隱式附加了'\\0'
。
至於第三個定義:
string greeting = "hello";
string
是類類型的對象 ,因此它比簡單的數組復雜。
它們之間的結果是否有所不同?
前兩個和第三個之間存在數量1和質量2的差異,這是由於std::string
是一個類類型對象。
1.定量的:數組比字符串占用更少的內存空間。
2.定性的:字符串提供資源管理和許多用於元素操作的工具。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.