c++ 學習 隨筆一

1、我最開始寫程序時,那個時候出了錯誤其實不知道怎麼調試,主要是編程工具的調試方法還沒有掌握,所以最常用的方法就是輸出標識語句用於調試作用,看看程序執行到哪裏錯誤,也就是沒有輸出標識句的那個部分;然後再一點一點看代碼,仔細查找問題到底出現在哪裏。之後在學3D的時候碰到了大名鼎鼎的緩衝區以及刷新的概念,我忽然想起自己學習c++時,也或者所有語言在內存區域分配內存都是這個樣子,也就是刷新緩衝區。因爲很多時候,我們是把我們的操作放到緩衝區中,再將緩衝區中的東西刷新到屏幕。這樣理解起來,應該對內存的管理又懂了一點點。

2、c++中,無論是輸出還是輸入符,總是返回左操作數,也就是總是能夠返回輸入、輸出流本身,所以,可以將由操作數連起來。

cout<<a<<b<<endl;
3、在寫程序時,最開始我們經常會看到添加頭文件有時用<>,有時用" ",其實原因非常簡單,<>中加的頭文件是標準庫中的頭文件,而" "中加的文件不是標準庫中的文件。

4、機器當中處理結構方便的方式,就是將結構塊化。其實就是說處理時一塊一塊處理,一般機器中以8個比特位爲一個字節,有的32位機就是4個字節爲一個字,相同的道理64位機,8個字節爲一個字。並且每個機器對待同一類型的內存分配不同,比如int整型,有的機器是16位,有的機器是32位,所以在int,unsigned,long等類型的使用過程中因不同類型的使用會導致機器的效率大大不同。比如float和double,有的機器處理double類型數據要遠比float類型效率高。所以,類型的選擇也會很大程度上影響處理的效率。

5、在程序當中,我們會經常看到這樣兩個字符類型,char,w_char,'A'爲char類型,但是L'A'就爲寬字符類型;說到這裏,我們也可以考慮一下字符串和寬字符串,形式與字符是基本相同的。字符串支持+操作,但是,如果我們將字符串與寬字符串相+時,編譯會報錯,所以字符串與寬字符串是兩種完全不同的類型。

6、說起初始化,大家應該都不陌生,隨便看一種類型的幾種初始化方法:

int a(10);
int b = 10;
怎麼樣,沒錯吧?!沒錯,第一種方式叫直接初始化,第二種方式叫複製初始化。在這裏要提醒一句,賦值絕對和初始化是兩種不同的行爲,絕對不能混爲一談,下面再看一個例子:

string a("abcd");
string a = "abcd";
形式與整型基本沒有什麼區別,但是仍然有細微的區別。第二種形式當中,機器在存儲"abcd"字面值時並不是string類型,所以在執行string = "abcd";時,發生了類型轉換,所以產生了臨時對象,而執行int b = 10;時,沒有產生臨時對象。

7、我們經常會提到默認初始化的概念,沒錯,我在最開始也c++程序時也是這樣想,所以經常聲明完變量就扔在那兒,總是以爲機器自動爲它初始化好了;但是實際情況不完全是這樣的,在c++的內置類型當中,只有在聲明全局變量時纔會產生默認初始化,在函數局部聲明的變量,沒有發生初始化。並且,使用沒有初始化的行爲,是一件非常可怕的事情,在jacabi迭代的那篇博客當中,我就提到過。所以,爲了避免這樣的錯誤發生,最好的方式就是,儘量在第一次使用該變量的時候聲明,再初始化這樣不會忘記。並且多說一句,const和引用類型聲明是必須初始化。

8、講到const多說一句,當程序多了的時候,我們不可能都在一個文件當中寫下所有的程序,爲了方便我們使用頭文件,假設我們要在頭文件中定義變量,在別的文件中使用,如果是非const變量,我們在頭文件中直接聲明,int a ;然後在文件中聲明即可,extern int a;但是如果頭文件中加的const的話,則必須聲明是extern const int a =10,本文件中extern int a;這樣纔可以,因爲const變量默認爲本文件使用有效,而非const變量默認全局有效。這裏一定要加一句,頭文件中不應含有定義的規則,對於const和inline函數是不適合的,這一點要注意。

9、引用聲明時必須初始化,而且初始化必須用同類型來初始化,常引用只能用常量來初始化。

10、非const引用只能綁定到同類型的對象上;但是const引用這可以綁定到所有的類型對象。

想想爲什麼,前面講過的臨時對象,有沒有,瞬間開朗了有沒有!然後又想到右引用,有沒有!blabla一大串,C++果然博大精深啊!

11、再說說枚舉,說實話枚舉我用的卻是是少,但是略懂一點。其中有幾個關鍵點,枚舉中的值初始化時都是常量或常量表達式;提供默認的初始化,並且是依次+1的操作;還有枚舉初始化時只能用同一枚舉類型來初始化。

12、說起C++,第一個想到的就應該是類,但是我們接觸的"類"卻不是class,而是struct,這一點相信大家都應該能夠理解。class和struct的區別就在於,類的成員默認訪問級別是private,而結構體默認是public。

13、說到頭文件落下了一個點,就是在程序當中反對多重定義,但是又要添加多個頭文件,所以 :

ifndef ××××
define ××××

endif
幫助我們很好的解決了問題。




發佈了33 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章