最近發現的C 的幾個「黑科技」

2021-07-16 21:21:51 字數 2001 閱讀 5097

先說乙個小發現,在delete 的時候,是按照與構造順序相反的順序來析構的!(原來的構造順序指的是,new 的時候,是按照下標順序構造的)

#include 

using

namespace

std;

class log

~log()

private:

int id;

};int main()

上面**的輸出結果為:

destruct 3

destruct 2

destruct 1

destruct 0

據說編譯器內部是通過「常量指標」來實現引用的,首先從它的大小來看一下:

#include 

using

namespace

std;

class log

~log()

private:

int id;

};};

int main()

輸出結果是:8 4

8是乙個指標的大小!ps,不能直接通過sizeof(ref)來判斷,因為這樣會輸出4 4,計算的是ref所引用的物件的大小。

下乙個主題需要區分指標(型別的)常量(指向)常量(的)指標,相信看了左邊括號裡的注釋,應該都清楚了吧?

還不清楚,只能po我自己的私藏筆記了:

常量指標,顧名思義,就是指向乙個常量的指標,比如:

const

intid = 555;

const

int* p1 = &id;

intconst* p2 = &id;

*p1 = 233; // 錯誤!不允許通過指標修改變數的值,因為指向的是常量

int hello = 666;

p1 = p2 = &hello; // 可以給指標重新賦值,指標本身不是常量

它的特點是,不能通過指標去修改所指向變數的值,常用於函式傳參時宣告變數內容不允許被修改(當然也可以用常引用)。

xx常量指的是這個變數是乙個常量,不能修改其值,所以,「指標常量」指的就是這樣的形式:

int

id = 233, id2 = 555;

int* const p = &id;

id = 666;

p = &id2;// 錯誤!p是乙個常量,不允許修改它的值

p = &id;// 錯誤!這樣也不行,不要以為p的值等於&id就可以給它賦值,哼╭(╯^╰)╮

你可以修改原始變數的內容(只要它不是const修飾的),但是不能改變指標的值,也就是說,這個指標就只能被指定為指向這個變數了!

據說,編譯器內部用常量指標來實現引用!(只是傳言而已)

直接po**,**清晰得,都不用解釋的^_^

#include 

#include

#include

#include

#include

#include

using namespace std;

class log

log& operator = (const log& rhs)

void display() const

private:

int id;

};templateclass reference

t& operator = (t& object)

};int main()

輸出結果是:

log

233log

666

更新於2016-08-18 15:57

jacket

於至善園4號

TokuDB的幾個黑科技工具

剛過完年,美女程式設計師靜靜想學習下tokudb相關技術,從何處入手呢?tokudb的技術資料可是出了名的少!本篇就給大家介紹下兩個 黑科技 工具,來幫助我們更深入的了解tokudb。此工具用來dump乙個fractal tree結構的資料檔案。這樣我們就可以很直觀的知道我寫入的資料在磁碟上是個什麼...

CSS 的黑科技

補充篇在這裡 昨天由於某些原因沒有寫部落格,之前說好的每天一篇的,這篇是為了補昨天的了。然後我就要當一次標題黨了。這裡的黑科技其實就是一些css中不怎麼為人所知但在解決某些問題的時候很溜的屬性。很多開發者估計都沒有正確認識這個border radius,因為基本上很多人都是這麼用的 box 稍微高階...

CSS 的黑科技

補充篇在這裡 昨天由於某些原因沒有寫部落格,之前說好的每天一篇的,這篇是為了補昨天的了。然後我就要當一次標題黨了。這裡的黑科技其實就是一些css中不怎麼為人所知但在解決某些問題的時候很溜的屬性。很多開發者估計都沒有正確認識這個border radius,因為基本上很多人都是這麼用的 box稍微高階一...