C++ 我想這樣用(二)


話接上篇,從純C環境轉C++環境需要注意些什么呢?

沒錯,雖然C++曾號稱兼容C,而且很多人甚至覺得C就是C++子集,但是c腦殘粉一定知道,兩者有很大的不同!

下面這些要點是比較突出的,后期我再補充其他的:

1.關於類型轉換

C是弱類型的,至少比C++弱,在C下面很多類型轉換我們不怎么管,編譯器也會默認,最多有些討厭的編譯器(如某軟家的)會給出警告,但是在C++下面就不一樣了,這些都是error!!你不顯示聲明,就別想跨類型!!其實這也是好事,多打幾個字母,反而代碼清晰了嚴謹了:)

Example

在C里,你這樣寫:
  
          int* p;
          p = malloc(10 * sizeof(int));

在C++里,你必須這樣寫:   
  
          int* p;
          p = (int *)malloc(10 * sizeof(int));

 

2.關於字符數組

在C里,你可以聲明一個字符數組,長度正好是串長,即:沒有地方放‘\0’,但在C++里,你不能這樣做:

char s[3] = "abc";(在C里正確,在C++里錯誤)。

我的建議是:如果你是個正常的人類,就是在C里面你也會寫成:

char s[4] = "abc";

不過其實最好的寫法是:char s[] = "abc"; 不是嗎??

 

3.關於嵌套的類型定義

 Example

          struct S {
              int a;
              struct T {
                  int t;
              } b;
              int c;
              enum E { V1, V2 } e;
          };

          struct T x;
          enum E y;

上述代碼在C里面沒問題,這是因為S、T、E三者的作用域(Scope)相同,但是在C++里,確實是錯誤的!在C++里,T和E的作用域是在S里的,想在外面使用只能S::T,這涉及到命名空間的問題,我們以后再說。

不過就算在C里,我也會把E和T單獨拿出來定義,這種嵌套的寫法,總有鳩占鵲巢的感覺~~

 

4.關於枚舉類型

我們都知道,在C里面枚舉和整型是一樣的,枚舉就是整型,於是我們這樣干:

          enum RGB { red, green, blue } rgb;
          ++rgb;

哦,看吧,世界多美好。然而C++的世界是殘酷的,枚舉是獨立的類型,且不支持++這類整數操作符。於是你說沒關系:"rgb=rgb+1;"就好了。很可惜。又錯了。。。是的,因為沒有顯示的進行類型轉換,於是正確的寫法:

          enum RGB { red, green, blue } rgb;

          rgb = RGB(rgb + 1);

雖然有的長,不過還好啦,如果你的強迫症已經達到神級了,那么也有辦法,給RGB加上++運算符的重載吧,具體內容以后說。

 

5.關於注釋

//和/**/的雙注釋方案早就被C采用了,所以其實沒啥特別要注意的,不過你非要這樣寫的話:

         i = j //* comment */ k ;

那么連上帝也幫不了你了= =!

 

這次就寫這么多了,下次繼續補充~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM