《深度探索C++对象模型》--7 站在对象模型的尖端
C++語言的擴(kuò)充性質(zhì)
1、template
(1)memberfunctions只有在被使用時(shí),才會(huì)被實(shí)例化。
(2)注意使用template時(shí),注意針對(duì)特定參數(shù)時(shí)可能有些操作沒有定義。
template在被實(shí)例化之前只能實(shí)施有限的錯(cuò)誤檢查,有些很簡(jiǎn)單的錯(cuò)誤編譯器照樣通過。
(3)template之中對(duì)于一個(gè)nonmembername的決議結(jié)果,都是由“scope ofthe template instantiation”來決定,而不是由“scope ofthe template declaration”決定的。前者用以專注于特定的實(shí)例;后者用于專注于一般的templateclass。
2、exceptionhandling (EH)
EH中類型描述符是必須的,因?yàn)檎嬲?/span>exception是在執(zhí)行期被處理的,其object必須有自己的類型信息。RTTI正是因?yàn)橹С?/span>EH而獲得的副產(chǎn)品。
3、runtimetype identification (RTTI)
dynamic_cast運(yùn)算符對(duì)某個(gè)class類型實(shí)施時(shí),如果傳回真正的地址,表示動(dòng)態(tài)類型被確認(rèn);如果傳回0,則表示沒有指向任何object,意味著應(yīng)該以另外一種邏輯試行于這個(gè)動(dòng)態(tài)類型未確定的object身上。
那為什么一個(gè)reference不可以像指針一樣將自己設(shè)置為0便代表了no object呢?
若將一個(gè)reference設(shè)置為0,會(huì)引起一個(gè)臨時(shí)對(duì)象(擁有被參考到的類型)被產(chǎn)生出來,該臨時(shí)對(duì)象的初值為0.這個(gè)reference然后被設(shè)置為該臨時(shí)對(duì)象的一個(gè)別名。因此,當(dāng)dynamic_cast運(yùn)算符施行于一個(gè)reference身上時(shí),不能夠提供對(duì)等于指針情況下的true/false。
總結(jié)
以上是生活随笔為你收集整理的《深度探索C++对象模型》--7 站在对象模型的尖端的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ exception
- 下一篇: 面试题整理3 大数的表示及加减法问题