日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
從語言的角度看C#到C++的困惑

上次寫了一點(diǎn)從c#到c++容易出現(xiàn)的一些問題, 今天接著寫一點(diǎn), 上一篇文章主要把精力集中在.H文件,命名空間等工程所需要的一些地方,今天主要說一說從語言的角度來說一些類型與c#迥然不同的用法.

創(chuàng)新互聯(lián)專注于新安網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供新安營(yíng)銷型網(wǎng)站建設(shè),新安網(wǎng)站制作、新安網(wǎng)頁設(shè)計(jì)、新安網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造新安網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供新安網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

C#到C++的困惑之一:枚舉類型

c++的枚舉類型用法非常的靈活,但是也帶來一些很不方便的地方.下面是一段正常的c++的枚舉類型的使用:

 
 
 
  1. # include < string>  
  2.  # include < iostream>  
  3.     
  4.  using namespace std;  
  5.     
  6.  enum Emotion  
  7.  {  
  8.      Happy = 0,  
  9.      Sad = 1,  
  10.      Exciting = 2,  
  11.  };  
  12.     
  13.  #define Love Emotion(4);  
  14.     
  15.  void main()  
  16.  {  
  17.      Emotion emotion = Love;  
  18.      Emotion emotion2 = Emotion::Exciting;  
  19.     
  20.      cout < <  (int)emotion < <  endl;  
  21.      cout < <  (int)emotion2 < <  endl;  
  22.  } 

從代碼上可以看到,首先是定義了一個(gè)Emotion的枚舉,在使用的時(shí)候,既可以在枚舉類型的前面加上枚舉的說明符,又可以不加上.得到的結(jié)果是一樣的.

這里要注意一下13行的#define,枚舉類型不僅可以再enum { }中定義,還可以再花括號(hào)之外定義.這種方法我是在d3d的頭文件定義中看到的.

下面再看一段代碼

 
 
 
  1. enum Emotion  
  2. {  
  3.     Happy = 0,  
  4.     Sad = 1,  
  5.     Exciting = 2,  
  6. };  
  7.    
  8. enum Test  
  9. {  
  10.    Happy = 5;  
  11.    Others = 6;  
  12. }; 

按c#的理解來說,這段代碼應(yīng)該是完全沒有問題的,Emotion和Test屬于兩個(gè)不同的域,但是c++沒有枚舉域這個(gè)概念,其實(shí)c++的枚舉定義更像是一堆的#define,上面的代碼有編譯錯(cuò)誤,告訴我有Happy枚舉量重定義. 上面的代碼可以按這樣的方式來理解:

 
 
 
  1. #define Happy 0;  
  2. #define Sad 1;  
  3. #define Exciting 2;  
  4.    
  5. #define Happy 5;  
  6. #define Others 6; 

但是不同的,這段代碼就沒有編譯錯(cuò)誤了,只是一個(gè)warning.

C#到C++的困惑之二:WCHAR, CHAR, TCHAR以及相關(guān)的問題.

這個(gè)問題其實(shí)網(wǎng)上有很多的文章來詳細(xì)的描述,我只是談?wù)勎覀€(gè)人的一些感想以及總結(jié)一下網(wǎng)上查到的內(nèi)容.

對(duì)于c++可沒有這么多的字符種類.一個(gè)String就可以包含所有的字符,而且還不需要進(jìn)行轉(zhuǎn)換.但是對(duì)于c++就不一樣了,c++由于兼容c語言的一些特性,char類型就是代碼ASCII碼里面的字符,如果要描述中文,日文等等字符就需要對(duì)原來的char類型進(jìn)行擴(kuò)展,也就是UNICODE碼,在c++里面被稱為wchar_t類型.

對(duì)于VC,認(rèn)為wchar_t看起來不好看(我不知道最后的't'是什么意思)于是就將wchar_t定義成了WCHAR,其實(shí)兩者之間是等價(jià)的.

對(duì)于對(duì)WCHAR*字符串進(jìn)行賦值的時(shí)候,注意要加上一個(gè)L宏,也就比如

 
 
 
  1. WCHAR* wStr = L"Hello World"; 

TCHAR是一種為了統(tǒng)一兩者的命名.下面這兩句話可以很清楚的說明問題.

定義了_UNICODE:    typedef wchar_t TCHAR ;

沒有定義_UNICODE: typedef char TCHAR ;

TCHAR的宏是_T,TEXT,_TEXT,三者是等價(jià)的.

下面給出一些常用的字符串函數(shù)的不同定義(針對(duì)WCHAR與char)

 
 
 
  1. size_t strlen( const char *string );  
  2. size_t wcslen( const wchar_t *string );  
  3.    
  4. char *strcpy( char *strDestination, const char *strSource );  
  5. wchar_t *wcscpy( wchar_t *strDestination, const wchar_t *strSource );  
  6.    
  7. char *strcat( char *strDestination, const char *strSource );  
  8. wchar_t *wcscat( wchar_t *strDestination, const wchar_t *strSource );  
  9.    
  10. int strcmp( const char *string1, const char *string2 );  
  11. int wcscmp( const wchar_t *string1, const wchar_t *string2 ); 

最后說說寬字符與普通字符之間的轉(zhuǎn)化:

一般大家使用現(xiàn)成的函數(shù)MultiByteToWideChar,與WideCharToMultiByte函數(shù).   

好了,從c#到c++的一些容易出現(xiàn)的困惑就講到這里。


分享名稱:從語言的角度看C#到C++的困惑
新聞來源:http://www.5511xx.com/article/ccepoii.html