任何缺点使用'?'而不是L'?'用wchar_t?

时间:2012-07-17 16:15:33

标签: c++ c character wchar-t

使用'?' - 样式字符文字与已知类型为wchar_t的值进行比较或分配,而不是使用L'?'样式文字,是否有任何缺点?

3 个答案:

答案 0 :(得分:6)

他们的数据类型和编码错误,所以这是一个坏主意。编译器将使用标准的积分转换(例如符号扩展)以静默方式扩展字符文字(对于字符串,您会遇到类型不匹配的编译错误)。但价值可能不匹配。

例如,字符0x80到0xff经常映射到不同的Unicode代码点,确切的映射因编译器的代码页而异。

显然,Unicode不可能使用身份转换映射所有各种代码页。 如果只是加宽就足够了,就不需要像mbtowcs这样的功能了。

写下关于'\xAB' vs L'\xAB'的具体问题,它们可能并不相同。见http://ideone.com/b1E39

答案 1 :(得分:3)

正如我所提到的,标准说

  

char数组(无论是普通charsigned 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的石器系统上失败。在值得考虑的任何现实世界系统中,可移植字符集的charwchar_t值都是ASCII,并且越来越多(但不是全部),wchar_t是Unicode代码点编号。