VC++2008中的unsigned short和wchar_t

本文探讨了从VC6移植到VS2008时wchar_t与unsigned short类型转换的问题。介绍了wchar_t与unsigned short的区别,并提供了三种解决方法:关闭wchar_t内置类型属性、使用reinterpret_cast强制转换或调整typedef声明。

     从VC6 移植到VS2008的时候,原来unsigned short* 直接可以转换成wchar_t的,现在都不能直接转换了,从网上查到了以下原因:

    【1、哪种情况可以直接进行类型转换?哪种必须要显式的转换?】

 

[

     VC++2005中的unsigned short和wchar_t


     很多人可能会认为unsigned short和wchar_t是一个东西。其实不然。在C++标准中,wchar_t是个内建的类型,长度是16bit。所以很多编译器就直接 typedef unsigned short wchar_t。但是事实上他们并不完全是一个东西。所以该写wchar_t还是写wchar_t。不要跟unsigned short混合起来写。
      举个例子。在VC++2005中有个编译开关叫: trait wchar_t as build-in type。如果打开这个选项那么wchar_t和unsigned short就完全是两个类型,也就是说 void function(wchar_t arg) 和void function(unsigned short)是两个参数不同的函数,反之则是一个函数。 这个在同一个工程中问题不大。但是如果你在两个不同的工程里
trait wchar_t as build-in type这个选项设置不同的话,就会出现问题。具体原因大家自己去想。呵呵。懒得写了。

     总之,遵守标准来写代码。总是对的。

]


哈哈,看了上面的内容终于有答案了。原来c++内置wchar_t。

这就好比下面的代码:

    short sh;
   unsigned short ush;
   ush = sh; //ok
   short* pShort;
   unsigned short* pChar;
   pShort = pChar;// illegal

   long l;
   unsigned long ul;
   ul = l; //ok
   long *pL;
   unsigned long *pul;
   pL = pul;// illegal


short可以隐式转换为unsigned short, 而short*不可以隐式转换为unsigned short*;

long可以隐式转换为unsigned long, 而long*不可以隐式转换为unsigned long*;

同理:TCHAR(wchar_t)可以隐式转换为XChar(unsigned short), 而TCHAR*(wchar_t*)不可以隐式转换为XChar*(unsigned short*)。

解决方案:

1,设置Property --> C/C++ --> language --> Treat wchar_t as Build-in Type为NO. wchar_t不是内置的了,而是typedef unsigned short wchar_t。

2,用reinterpret_cast

3,改typedef unsigned short XChar 为 typedef wchar_t XChar。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值