成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從語言的角度看C#到C++的困惑

開發 后端
本文從語言的角度講述了從c#到c++的一些容易出現的困惑,希望對大家有所幫助。

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

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.  } 

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

這里要注意一下13行的#define,枚舉類型不僅可以再enum { }中定義,還可以再花括號之外定義.這種方法我是在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#的理解來說,這段代碼應該是完全沒有問題的,Emotion和Test屬于兩個不同的域,但是c++沒有枚舉域這個概念,其實c++的枚舉定義更像是一堆的#define,上面的代碼有編譯錯誤,告訴我有Happy枚舉量重定義. 上面的代碼可以按這樣的方式來理解:

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

但是不同的,這段代碼就沒有編譯錯誤了,只是一個warning.

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

這個問題其實網上有很多的文章來詳細的描述,我只是談談我個人的一些感想以及總結一下網上查到的內容.

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

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

對于對WCHAR*字符串進行賦值的時候,注意要加上一個L宏,也就比如

  1. WCHAR* wStr = L"Hello World"

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

定義了_UNICODE:    typedef wchar_t TCHAR ;

沒有定義_UNICODE: typedef char TCHAR ;

TCHAR的宏是_T,TEXT,_TEXT,三者是等價的.

下面給出一些常用的字符串函數的不同定義(針對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 ); 

最后說說寬字符與普通字符之間的轉化:

一般大家使用現成的函數MultiByteToWideChar,與WideCharToMultiByte函數.   

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

【編輯推薦】

  1. 總結C#哈希表的用法
  2. 不一樣的入門:看C# Hello World的17種寫法
  3. 什么是WMI?及其示例
  4. 從C#到C++容易出現的問題解答
  5. 淺議.NET、ASP.NET和C#的關系
責任編輯:book05 來源: cnblogs
相關推薦

2009-08-25 17:46:31

C#多態

2009-08-20 15:54:48

從C#到C++

2009-09-04 17:34:11

C#CC++

2021-05-06 10:33:30

C++Napiv8

2014-05-15 16:33:05

C++CLI調用C#

2015-06-25 11:21:33

C++Objective-C

2021-12-06 23:00:36

CC++編程語言

2011-07-13 17:08:02

CC++

2011-07-13 16:48:55

CC++

2011-07-13 17:42:32

CC++

2010-01-21 16:08:26

C++語言

2010-01-15 17:38:37

C++語言

2025-02-14 00:00:20

C#C/C++語言

2010-11-08 10:20:18

2010-01-15 18:35:25

C++的類

2014-04-17 10:37:43

C++.NET Native

2019-04-28 16:10:50

設計Redux前端

2009-09-02 17:10:45

C#語言入門

2011-01-05 11:12:34

C++

2024-01-22 11:33:17

C++編程語言開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天干天天干 | 日韩免费一区二区 | 久久99精品国产自在现线小黄鸭 | 伊人精品视频 | 久久久人成影片免费观看 | 超碰成人在线观看 | 色视频网站 | 国产三级在线观看播放 | 国产精品福利在线观看 | 国产在线激情视频 | 色婷婷激情综合 | 中文字幕 在线观看 | 久久噜噜噜精品国产亚洲综合 | 亚洲成av人影片在线观看 | 久久久久99 | 国产日韩一区二区三区 | 日韩av在线一区二区 | 久久精品小视频 | 久久性色| 久久久久国产成人精品亚洲午夜 | 国产视频第一页 | 在线一区二区三区 | 韩日一区二区 | 自拍偷拍亚洲视频 | 成人精品一区亚洲午夜久久久 | 国产成人在线一区二区 | 亚洲一区 中文字幕 | 欧美视频二区 | 97精品国产 | 日韩av在线免费 | 国产精品日韩 | 国产91综合一区在线观看 | 久久久成人免费一区二区 | 国产精品一区二区视频 | 天天综合91 | 午夜男人的天堂 | 成人一级毛片 | 国产精品一区在线 | 极品国产视频 | 5060网一级毛片 | 午夜精品一区二区三区在线观看 |