c++那些事
修飾變數:常量(相比#define,可以節省空間,避免#define定義的常量在記憶體中有若干個拷貝;防止被修改;型別檢查)
修飾指標:不同位置作用不同,在變數前代表指標不可改變,其他位置代表指標指向的內容不可變
修飾引數:不可修改引數
修飾函式:函式體不可修改類物件
修飾函式返回值:返回值不可變
const物件預設為檔案區域性變數
類成員const變數只能在初始化列表進行初始化
this 指標預設是 t * const,對const函式會變成 const t const*
引用在設定後就不能修改了
內聯能提高函式效率,但並不是所有的函式都定義成內聯函式!內聯是以**膨脹(複製)為代價,僅僅省去了函式呼叫的開銷,從而提高函式的執行效率。
如果執行函式體內**的時間相比於函式呼叫的開銷較大,那麼效率的收貨會更少!
另一方面,每一處內聯函式的呼叫都要複製**,將使程式的總**量增大,消耗更多的記憶體空間。
虛函式可以是內聯函式,內聯是可以修飾虛函式的,但是當虛函式表現多型性的時候不能內聯。內聯是在編譯器建議編譯器內聯,而虛函式的多型性在執行期,編譯器無法知道執行期呼叫哪個**,因此虛函式表現為多型性時(執行期)不可以內聯。
建構函式可以為虛函式嗎?
建構函式不可以宣告為虛函式。同時除了inline之外,建構函式不允許使用其它任何關鍵字。
為什麼建構函式不可以為虛函式?
儘管虛函式表vtable是在編譯階段就已經建立的,但指向虛函式表的指標vptr是在執行階段例項化物件時才產生的。 如果類含有虛函式,編譯器會在建構函式中新增**來建立vptr。 問題來了,如果建構函式是虛的,那麼它需要vptr來訪問vtable,可這個時候vptr還沒產生。 因此,建構函式不可以為虛函式。我們之所以使用虛函式,是因為需要在資訊不全的情況下進行多型執行。而建構函式是用來初始化例項的,例項的型別必須是明確的。 因此,建構函式沒有必要被宣告為虛函式。
explicit 修飾建構函式時,可以防止隱式轉換和複製初始化
explicit 修飾轉換函式時,可以防止隱式轉換,但按語境轉換除外
不允許類似b b2 = 1;
的隱式轉換。
#include using namespace std;
class base;
r2 c2 = color2::red;
cout << static_cast(c2) << endl; //必須轉!
可以指定用特定的型別來儲存enum
enum class color3:char; // 前向宣告
// 定義
enum class color3:char
;char c3 = static_cast(color3::red);
引用
指標必須初始化
可以不初始化
不能為空
可以為空
不能更換目標
可以更換目標
引用必須初始化,而指標可以不初始化。
我們在定義乙個引用的時候必須為其指定乙個初始值,但是指標卻不需要。
int &r; //不合法,沒有初始化引用
int *p; //合法,但p為野指標,使用需要小心
引用不能為空,而指標可以為空。
由於引用不能為空,所以我們在使用引用的時候不需要測試其合法性,而在使用指標的時候需要首先判斷指標是否為空指標,否則可能會引起程式崩潰。
void test_p(int* p)
void test_r(int& r)
引用不能更換目標
指標可以隨時改變指向,但是引用只能指向初始化時指向的物件,無法改變。
int a = 1;
int b = 2;
int &r = a; //初始化引用r指向變數a
int *p = &a; //初始化指標p指向變數a
p = &b; //指標p指向了變數b
r = b; //引用r依然指向a,但a的值變成了b
C 的那些事
面試總結一 1.sizeof的題 沒找到原題,找到乙個類似的如下 char str new char 100 sizeof str 答 在c c 裡陣列作為引數時傳遞的實際上是指向陣列第乙個元素的指標,因此sizeof str 返回的是指標的大小,即4。推薦於2016 11 04 03 14 03最...
C 編譯那些事
最近想從pcl庫中繼承類進行改寫,然後遇到了很多問題,這裡記錄一下,自己是菜鳥,編譯什麼的都不太懂。我們一般都是.cpp和.h的形式,pcl是在.h中定義,然後在.hpp中實現,cpp的作用我現在也沒搞明白,還有涉及預編譯什麼的,蒙 從庫的.h和.hpp分別複製了檔案出來,命名成自己的,繼承類也改了...
微服務那些事 筆記
這本書是2017年的,有些舊,畢竟springcloud更新速度還是挺快的,不過基礎的東西變化不太大。讀後感 這本書語言風趣,用來入門還是可以的。這本書的側重點不在於技術,而是在於工作經驗,難得的好書。這本書一共11章,216頁,算是很精簡了,介紹肯定不全面,也不會太深入,但是對於想快速了解spri...