《C++必知必会》读书笔记2
在類X的非常量成員函數中,this指針的類型為 X *const .也就是說他是指向非常量X的常量指針。
但是在類X的常量成員函數中,this的類型為const X* const . 這就是常量成員函數和非常量成員函數的區別。
類的非靜態數據成員可以被聲明為mutable,這將容許她們的值可以被這個類的常量成員函數(也包括非常量成員函數)修改。
?
如果一個類聲明了一個或者多個虛函數,那么編譯器會為這個類的每一個對象插入一個指向虛函數表的指針。
如果使用了虛擬繼承,對象將會通過嵌入的指針,偏移量或者其他非嵌入的信息來維持對其虛基類自對象位置的跟蹤。因此,即使類沒有聲明虛函數,其中還是有坑被插入了一個虛函數表的指針。
?
對于一個類X來說,復制構造函數應該被聲明為 X (const X &);? 而復制賦值操作符應該被聲明為X& operator=(const X&) 。
?
將一個函數的地址初始化或賦值給一個指向函數的指針的時候,無需顯式的取得函數地址,編譯器知道隱式的獲取函數的地址,因此在這種情況下,&操作符是可選的。比如:
void (*fp)(int );
extern void h(int);
fp=h;? //OK
fp= &h; //OK
類似的,可以采用如下的方式調用函數:
fp(12); 或者 (*fp)(12);
?
注意,和void * 指針可以指向任何類型的數據不同,不存在可以指向任何類型函數的通用指針。
還要注意,非靜態成員函數的地址不是一個指針,因此不可以將一個函數指針指向一個非靜態成員函數。
?
函數指針的一個傳統用途是實現回調。
一個函數指針指向內聯函數是合法的。但是如果通過函數指針調用內聯函數將不會導致內聯函數的調用,因為編譯器通常無法在編譯階段確定將會調用什么函數。
============================================================================== 本文轉自被遺忘的博客園博客,原文鏈接:http://www.cnblogs.com/rollenholt/archive/2012/03/24/2416240.html,如需轉載請自行聯系原作者
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生
總結
以上是生活随笔為你收集整理的《C++必知必会》读书笔记2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: golang大量字符串拼接方法
- 下一篇: Dubbo自定义异常message过长解