c++ - difference between L"" and u8"" -


is there difference between followings?

auto s1 = l"你好"; auto s2 = u8"你好"; 

are s1 , s2 referring same type?
if no, what's difference , 1 preferred?

they not same type.

s2 utf-8 or narrow string literal. c++11 draft standard section 2.14.5 string literals paragraph 7 says:

a string literal begins u8, such u8"asdf", utf-8 string literal , initialized given characters encoded in utf-8.

and paragraph 8 says:

ordinary string literals , utf-8 string literals referred narrow string literals. narrow string literal has type “array of n const char, n size of string defined below, , has static storage duration (3.7).

s1 wide string literal can support utf-16 , utf-32. section 2.14.5 string literals paragraph 11 says:

a string literal begins l, such l"asdf", wide string literal. wide string literal has type “array of n const wchar_t, n size of string defined below; has static storage duration , initialized given characters.

see utf8, utf16, , utf32 discussion on differences , advantages of each.

a quick way determine types use typeid:

std::cout << typeid(s1).name() << std::endl ; std::cout << typeid(s2).name() << std::endl ; 

on system output:

pkw pkc 

checking each of these c++filt -t gives me:

wchar_t const* char const* 

Comments

Popular posts from this blog

Detect support for Shoutcast ICY MP3 without navigator.userAgent in Firefox? -

web - SVG not rendering properly in Firefox -

java - JavaFX 2 slider labelFormatter not being used -