L'A'和'A'完全一样吗?

时间:2010-03-17 10:46:01

标签: c++ unicode char

当我们编写支持unicode和multibytes的程序时,
我们经常使用_T(“some string”)宏来表示字符串。

但是,角色是否还需要包装此宏?

L'A'和'A'完全相同吗? 我们不需要为一个角色包裹_T('A')吗?

4 个答案:

答案 0 :(得分:5)

不,L'A'是类型为wchar_t的unicode字符,而'A'是类型为char的ASCII字符。这是字符串文字的MSDN

答案 1 :(得分:3)

如果您编写'A',并且该值转换为wchar_t,那么至少在Microsoft编译器上,它将具有与您编写L'A'或{相同的值{1}}。

对于字符串文字也不能这样说,因为没有从_T('A')const char*的有用转换。我认为这意味着让字符文字类型正确,而不是字符串文字。

根据字符文字是宽还是窄来编写行为不同的代码很容易 - 只需要一个完全不同的重载函数。但是在实践中,重载的合理函数可以使两种类型的角色最终与const wchar_t*使用'A'做同样的事情。并且只有L'A'才能使用wchar_t并且没有超载的功能。

我没有立即在标准中看到要求'A'的任何内容,因此理论上非Microsoft编译器可能会做一些完全不同的事情。但是你通常希望宽字符集是窄字符集的扩展,就像Unicode扩展ISO-8859-1一样。具体来说,“扩展”的含义是,与整数相等的代码点表示“相同的字符”。

答案 2 :(得分:1)

L'A'是 wchar_t ,'A'是 char 。它们是不同的类型,也有不同的大小。

如果定义了_UNICODE宏,则应使用_T('A')将L添加到文字中。

答案 3 :(得分:0)

_T是来自Visual Studio的宏,如果在你的项目的属性中字符集属性设置为'使用多字节字符'_T将被替换为空字符串,如果它将被设置为'使用Unicode字符集'_T将是换成L. 此宏定义为从Unicode-> ASCII字符集简单转换项目而无需任何其他更改