話接上篇,從純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 b;
int c;
enum e 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 rgb;
++rgb;
哦,看吧,世界多美好。然而c++的世界是殘酷的,列舉是獨立的型別,且不支援++這類整數操作符。於是你說沒關係:"rgb=rgb+1;"就好了。很可惜。又錯了。。。是的,因為沒有顯示的進行型別轉換,於是正確的寫法:
enum rgb rgb;
rgb = rgb(rgb + 1);
雖然有的長,不過還好啦,如果你的強迫症已經達到神級了,那麼也有辦法,給rgb加上++運算子的過載吧,具體內容以後說。
5.關於注釋
//和/**/的雙注釋方案早就被c採用了,所以其實沒啥特別要注意的,不過你非要這樣寫的話:
i = j //* comment */ k ;
那麼連上帝也幫不了你了= =!
這次就寫這麼多了,下次繼續補充~~
Linux 協程是不是我想的這樣
最早知道的概念是程序 每個程序裡面的執行單元是執行緒 乙個程序肯定有乙個主線程 也可以開出一些子執行緒 這倆都是作業系統控制的 協程是啥概念?在乙個執行緒裡面如果開啟了乙個協程 這個主線程就會被阻塞到協程裡面去 協程執行完 再回到主線程 這個好 和執行緒的阻塞還不一樣 執行緒是被作業系統核心所阻塞的...
我想更深入c
因為有一點學c的經歷,因此對於我剛入大學學c 而言也算有一點基礎,但是我並不想滿足於此。記錄一下自己的一些小錯誤,不想以後再犯,也想藉此更深入的學習c 最後宣告一下 如果出現如低階錯誤等等各位看不慣的地方,求輕拍 首先是這道題 我最初的想法是這樣的 這道題我最後需要輸出 然後只有最後一項需要小於10...
ok我想獲得C幣
建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...