2010-11-15 87 views
6

std :: wstring.length()函數的結果是什麼,wchar_t(s)中的長度或符號的長度?爲什麼?std :: wstring長度

TCHAR r2[3]; 
r2[0] = 0xD834; // D834, DD1E - musical G clef 
r2[1] = 0xDD1E; // 
r2[2] = 0x0000; // '/0' 

std::wstring r = r2; 

std::cout << "capacity: " << r.capacity() << std::endl; 
std::cout << "length: " << r.length() << std::endl; 
std::cout << "size: "  << r.size()  << std::endl; 
std::cout << "max_size: " << r.max_size() << std::endl; 

Output> 

capacity: 351 
length: 2 
size: 2 
max_size: 2147483646 

回答

11

std::wstring::size()返回字符串中寬字符元素的數量。這與字符數量不同(正如您正確注意到的那樣)。

不幸的是,std::basic_string模板(以及它的實例,如std::stringstd::wstring)是編碼不可知的。從這個意義上講,它實際上只是一個字節串而不是一串字符的模板。

0

size方法返回字符串中當前元素的數量。它與wstring :: length相同 人們通常會談論單詞,句子或段落的長度,而不是其大小

+0

大小和長度是同義詞 – 2010-11-15 11:21:19

+0

size_type string :: capacity()const 返回字符串可以容納的字符數量,無需重新分配。 – 2010-11-15 11:22:07

0

length()size()通常不含的null字符串在返回的「字符」(不考慮寬度)的數量,這裏的長度&大小是2 capacity()返回多少內存(讀:多少個字符,如這是多字節)通常在字符串重新分配之前可用。

1

首先,std :: wstring是std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >的一個實例。

雖然大部分真正的工作都是由char_traits完成的,並且可以自己編寫,但主要是爲了使用不同字符大小的C運行時庫。

解析Element *指針的方法是,直到達到char_traits指示的字符作爲終止符。

但是,您可以使用指針和長度來構造,在這種情況下,它將讀取它告訴您的字符數,其中將包含任何空字節。您可能在basic_string中嵌入了空字節,並且如果您調用作爲同一事物的別名的length()或size(),它會告訴您它包含多少個字符。

char_traits沒有什麼魔法可以將多元素字符解碼爲一體,也不應該嘗試以這種方式實現它。

+0

爲什麼這個答案被標記下來?我給出了有關wstring究竟是什麼以及如何從指針構造的有用信息。 – CashCow 2010-11-17 11:21:46