当我们编写一个既支持 unicode 又支持多字节的程序时,
我们经常对字符串使用 _T("some string") 宏。

但是,字符也需要包装这个宏吗?

L'A' 和 'A' 完全一样吗?
我们不需要为一个字符包装 _T('A') 吗?

最佳答案

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

对于字符串文字就不能这样说,因为没有从 const char*const wchar_t* 的有用转换。我认为这意味着获得正确的字 rune 字类型比字符串文字更不重要。

根据字符字面量是宽还是窄来编写行为不同的代码很容易 - 只需使用一个重载函数来完成完全不同的事情。但在实践中,重载以获取两种类型字符的明智函数最终会用 'A' 做同样的事情,就像他们用 L'A' 做的一样。没有重载的函数,只使用 wchar_t ,可以使用 'A' 就好了。

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

关于c++ - L'A' 和 'A' 完全一样吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2461559/

10-11 17:07