先說乙個小發現,在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稍微高階一...