c 那些事 筆記

2021-10-06 15:25:37 字數 2078 閱讀 1925

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...