以下有什么区别吗?
auto s1 = L"你好";
auto s2 = u8"你好";
Are s1
and s2
指的是同一类型?
如果不是,有什么区别以及首选哪一个?
它们不是同一类型。
s2
是 UTF-8 或窄字符串文字。这C++11标准草案 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3485.pdf第2.14.5节字符串文字第 7 段说:
以以下开头的字符串文字u8
, 例如u8"asdf"
, is a UTF-8 字符串文字并使用 UTF-8 编码的给定字符进行初始化。
第 8 段说:
普通字符串文字和 UTF-8 字符串文字也称为窄字符串文字。窄字符串文字具有类型“数组的n const char
”, where n是如下定义的字符串的大小,并且具有静态存储持续时间(3.7)。
s1
是一个宽字符串文字,可以支持 UTF-16 和 UTF-32。第2.14.5节字符串文字第11段说:
以以下开头的字符串文字L
, 例如L"asdf"
, is a 宽字符串文字。宽字符串文字具有类型“数组的n const wchar_t
”, where n是字符串的大小,如下定义;它具有静态存储持续时间并使用给定字符进行初始化。
See UTF8、UTF16 和 UTF32 https://stackoverflow.com/questions/496321/utf8-utf16-and-utf32对每个的差异和优点进行良好的讨论。
确定类型的快速方法是使用typeid http://en.cppreference.com/w/cpp/language/typeid:
std::cout << typeid(s1).name() << std::endl ;
std::cout << typeid(s2).name() << std::endl ;
在我的系统上,这是输出:
PKw
PKc
检查每一个c++filt -t
给我:
wchar_t const*
char const*
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)