开发者

std::wstring length

开发者 https://www.devze.com 2023-01-24 22:37 出处:网络
What is the result of std::wstring.length() function, the length in wchar_t(s) or the length in symbols? And why?

What is the result of std::wstring.length() function, the length in wchar_t(s) or the length in symbols? And why?

TCHA开发者_如何学GoR 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


std::wstring::size() returns the number of wide-char elements in the string. This is not the same as the number of characters (as you correctly noticed).

Unfortunately, the std::basic_string template (and thus its instantiations, such as std::string and std::wstring) is encoding-agnostic. In this sense, it is actually just a template for a string of bytes and not a string of characters.


Firstly std::wstring is an instantiation of std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >.

Although most of the real work is done by char_traits, and one can write their own, this is done primarily to enable use of the C runtime library with different character sizes.

The way to parse in a pointer of Element* is until the character indicated by the char_traits as the terminator is reached.

However you can construct with a pointer and a length, in which case it will read the number of characters it tells you to, which will include any null-bytes. You may have embedded null-bytes in a basic_string, and if you call length() or size() which are aliases for the same thing, it will tell you how many characters it contains.

There is no magic in char_traits to decode multi-element characters as one, nor should you try to implement it that way.


size method returns the current number of elements in the string. It is the same as wstring::length People usually talk about a word, sentence or paragraph's length, not its size


length() and size() typically return the number of "characters" (irrespective of width) in the string excluding the null, here the length & size is 2. capacity() returns how much memory (read: how many characters, as this is multi-byte) is typically available before the string will re-allocate.

0

精彩评论

暂无评论...
验证码 换一张
取 消