Aar*_*lla 17
见维基百科.
基本上,它是当前语言环境中"text"的便携式类型(带有变音符号).它早于Unicode,并没有解决很多问题,所以今天它主要是为了向后兼容.除非必须,否则不要使用它.
sbi*_*sbi 17
为什么需要wchar_t?它如何优于短(或__int16或其他)?
在C++世界中,wchar_t它是自己的类型(我认为它是typedef在C中),所以你可以基于此重载函数.例如,这使得可以输出宽字符而不输出它们的数值.在VC6中,这里wchar_t只是typedeffor unsigned short,这段代码
wchar_t wch = L'A'
std::wcout << wch;
Run Code Online (Sandbox Code Playgroud)
输出65因为
std::ostream<wchar_t>::operator<<(unsigned short)
Run Code Online (Sandbox Code Playgroud)
被调用.在较新的VC版本中wchar_t是一种独特的类型,所以
std::ostream<wchar_t>::operator<<(wchar_t)
Run Code Online (Sandbox Code Playgroud)
被称为,并输出A.
Mic*_*urr 10
有一个wchar_t原因的原因几乎是一个size_t或一个time_t- 它是一个抽象,表明一个类型意图表示什么,并允许实现选择一个可以在特定平台上正确表示类型的底层类型.
注意,wchar_t不需要是16位类型 - 有平台,它是32位类型.
提供诸如数据类型有意义的名称之类的东西通常被认为是一件好事.
什么是最好的,char或int8?我认为这:
char name[] = "Bob";
Run Code Online (Sandbox Code Playgroud)
比这更容易理解:
int8 name[] = "Bob";
Run Code Online (Sandbox Code Playgroud)
wchar_t和int16也是一样的.
wchar_t是存储和处理平台的unicode字符的原语.它的大小并不总是16位.在unix系统上wchar_t是32位(也许unix用户更可能使用额外位用于的klingon字符:-).
这可能会给移植项目带来问题,特别是如果你交换wchar_t和缩短,或者你交换wchar_t和xerces' XMLCh.
因此,wchar_t对于编写跨平台代码而言,将其作为不同类型的缩写非常重要.清理这个是将我们的应用程序移植到unix然后从VC6移植到VC2005最困难的部分之一.
当我阅读的相关标准,这似乎是微软fcked这一个厉害.
我的POSIX手册页<stddef.h>说:
- wchar_t:整数类型,其值范围可以表示编译环境支持的语言环境中指定的最大字符集的所有成员的不同宽字符代码:空字符具有代码值0和可移植字符的每个成员当用作整数字符常量中的单个字符时,set的代码值等于其值.
因此,如果您的平台支持Unicode,则16位wchar_t是不够的.每个wchar_t应该是一个字符的不同值.因此,wchar_t从一种有用的方式工作在文本的字符级别(当然,从多语言区域解码后),在Windows平台上完全无用.
添加到 Aaron 的评论中 - 在 C++0x 中,我们终于得到了真正的 Unicode 字符类型:char16_t 和 char32_t 以及 Unicode 字符串文字。
| 归档时间: |
|
| 查看次数: |
7721 次 |
| 最近记录: |