C++Primer學習筆記
C++中關于Const形參和實參的總結,
在調用函數的時候,如果函數的形參是const的話那么這個函數可以接受非const的實參。
如果函數的實參是const的,形參是非const的,那么這個函數是不接受的
函數的調用const與非const的區別在于,我們可以用非const對象初始化const引用對象,而不能用const對象初始化非const的應用對象,這樣不安全。
第二章:
在做基礎變量賦值的時候,如果const對象只能賦值給const引用對象,非const對象可以賦值給const引用對象。
1.(P54) 如果想在多個文件之間共享const對象,必須在變量的定義之前添加extern關鍵字
2.(P59)C++11新標準規定,允許將變量聲明為constexpr類型以便由編譯器來驗證變量的值是否是一個常量表達式。聲明為constexpr的變量一定是一個常量,而且必須用常量表達式初始化。一般來說,如果你認定變量是一個常量表達式,那就把它聲明成constexpr類型。
3.(p59)必須明確一點,在constexpr聲明中如果定義了一個指針,限定符constexpr僅對指針有效,與指針所指的對象無關。因為constexpr把它說定義的對象置為了頂層const
4.C++11新標準引入了auto類型說明符,用它就能讓編譯器替我們去分析表達式所屬的類型。和原來那些只對應一種特定類型的說明符不同,auto讓編譯器通過初始值來推算變量的類型。顯然,auto定義的變量必須有初始值。
5.使用auto也能在一條語句中聲明多個變量,因為一條聲明數據只能有一個基本數據類型,所以該語句中所有變量的初始基本數據類型必須一樣。
6.C++11新標準引入了第二種數據類型說明符decltype,它的作用是選擇并返回操作數的數據類型,在此過程中,編譯器分析表達式并得到它的類型,卻不實際計算表達式的值。
如果表達式的內容是解引用操作,則decltype將得到引用類型。正如我們所熟悉的那樣,解引用指針可以得到指針所指的對象。而且還能給這個對象賦值。
7.對于decltype所用的表達式來說,如果變量名加上了一對括號,則得到的類型與不加括號時會有不同,如果decltype使用的是一個不加括號的變量,則得到的結果就是該變量的類型;如果給變量加上一層或多層括號,編譯器就會把它當成是一個表達式,變量是一種可以作為賦值語句左值的特殊表達式,所以這樣的decltype就會得到引用類型。
8.頭文件通常包含那些只能被定義一次的實體,如類,const和constexpr變量等。頭文件也經常用到其他頭文件的功能。
9.C++程序還會用到的一項處理就是頭文件保護,頭文件保護符依賴于預處理變量,預處理變量有兩種狀態,已定義和未定義。#define指令把一個名字設定為預處理變量,另外兩個指令則分別檢查某個指定的預處理變量是否已經定義:#ifdef,當且僅當變量已定義時為真,#ifndef當且僅當變量未定義時為真,一旦檢查結果為真,則執行后續操作直至遇到#endif指令為止。
10.位于頭文件的代碼,一般來說不應該使用using聲明,這是因為頭文件的內容會拷貝到所有引用它的文件中去,如果頭文件里有某個using聲明,那么每個使用了該頭文件的文件都會有這個聲明。對于某些程序來說,由于不經意間包含了一些名字,反而可能產生始料未及的名字沖突。
11.凡是使用了迭代器的循環體,都不要向迭代器所屬的容器添加元素。
12.閉包:函數是有狀態的。相同的函數可以有不同的狀態.通過函數生成函數。生成的這些函數包含上下文,狀態。
13.string的實現機制:
1.在存儲上,string也是用數組來存儲。
2.既然是一個數組,這個就有一個大小,capacity就是這個數組的大小;
3.如果string=hello,至少需要6個字節,但是在string實現的時候,一般會多分配一個空間,用于字符串的拼接;
4,capcity有可能是20,會多分配一些內容,用于string內容的擴展;
5,如果拼接后的字符串長度超過capacity,那么就需要繼續分配空間,最大就是max_size
14.函數的形參列表可以為空,但是不能省略,要想定義一個不帶形參的函數,最常用的辦法是書寫一個空的形參列表。不過為了與C語言兼容,也可以使用關鍵字void表示函數沒有形參。
15.局部靜態對象在程序的執行路徑第一次經過對象定義語句時初始化,并且直到程序終止才被銷毀,在此期間即使對象所在的函數結束執行也不會對它有影響。
16.如果我們傳遞的形參是一個數組,則實參自動的轉換成指向數組首元素的指針,數組的大小對函數的調用沒有影響。
17.(P202)函數的調用,返回局部對象的引用是錯誤的;同樣,返回局部對象的指針也是錯誤的,一旦函數完成,局部對象被釋放,指針將指向一個不存在的對象。
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。