使用'?'
- 样式字符文字与已知类型为wchar_t
的值进行比较或分配,而不是使用L'?'
样式文字,是否有任何缺点?
答案 0 :(得分:6)
他们的数据类型和编码错误,所以这是一个坏主意。编译器将使用标准的积分转换(例如符号扩展)以静默方式扩展字符文字(对于字符串,您会遇到类型不匹配的编译错误)。但价值可能不匹配。
例如,字符0x80到0xff经常映射到不同的Unicode代码点,确切的映射因编译器的代码页而异。
显然,Unicode不可能使用身份转换映射所有各种代码页。 如果只是加宽就足够了,就不需要像mbtowcs
这样的功能了。
写下关于'\xAB'
vs L'\xAB'
的具体问题,它们可能并不相同。见http://ideone.com/b1E39
答案 1 :(得分:3)
正如我所提到的,标准说
char数组(无论是普通
char
,signed char
还是unsigned char
),char16_t
数组,char32_t
数组还是wchar_t
数组可以用狭义的字符文字来初始化......
但是,在__STDC_MB_MIGHT_NEQ_WC__
预处理器定义的部分中,它表示
整数常量1,用于表示在
wchar_t
的编码中,当用作普通字符中的单个字符时,基本字符集的成员不需要具有等于其值的代码值文字。
对于__STDC_ISO_10646__
:
yyyymmL形式的整数常量(例如,199712L)。如果定义了此符号,那么Unicode所需集中的每个字符,当存储在类型
wchar_t
的对象中时,与该字符的短标识符具有相同的值。
我并不是解释标准的专业人士,但我认为这意味着您的问题的答案是他们可能有不同的陈述,您应该始终使用L
。
答案 2 :(得分:1)
唯一的缺点是你的程序可能会在使用EBCDIC的石器系统上失败。在值得考虑的任何现实世界系统中,可移植字符集的char
和wchar_t
值都是ASCII,并且越来越多(但不是全部),wchar_t
是Unicode代码点编号。