C 隱式型別轉換 operator T

2021-10-02 16:34:18 字數 671 閱讀 1745

最近研究智慧型指標,osg::ref_ptr的機制時候發現乙個有趣的問題。就是c++智慧型指標都會提到一點:

由於智慧型指標是乙個物件,所以if (my_smart_object)永遠為真,要判斷智慧型指標的裸指標是否為空,需要這樣判斷:if (my_smart_object.get())。

但是我在寫osg的時候,下意識都是直接判定的if(myptr)也沒碰到問題。研究後發現原來是osg::ref_ptr過載了乙個函式:

operator t*()

const

由於智慧型指標是乙個物件,所以if (my_smart_object)永遠為真

覺得非常不合理,因為如果普通的類的物件,根本就不能判斷if(my_smart_object),因為這個物件不能隱式轉換成boo型別的值,所以上述判斷又從何而來呢?比如:

而一旦可以用if判斷,那其實就是過載了隱式轉換,既然過載了,為什麼要轉換成毫無意義的this指標?而不是內部儲存的指標。

基於使用純c++的智慧型指標較少(指stl或boost),暫時不能下什麼結論。先 mark一下。

operator運算元 隱式型別轉換

3.參考資料 對於 operator 運算子,除了常用的operator overloading 操作符過載 之外,還有operator casting 操作隱式轉換 的用法。c 可以通過operator實現過載操作符,格式如下 return type operator operand parame...

C 隱式型別轉換

c 定義了一組內建型別物件之間的轉換標準,在必要時它們被編譯器隱式的應用到物件上。發生隱式型別轉換的情景 1,在混合型別的算術表示式中 轉換原則 轉換為最寬的資料型別。也可叫,算術轉換。int ival 5 double dval 3.14 ival 被提公升為double型別 ival dval ...

C 隱式型別轉換

眾所周知,c 的基本型別中並非完全的對立,部分資料型別之間是可以進行隱式轉換的。所謂隱式轉換,是指不需要使用者干預,編譯器私下進行的型別轉換行為。很多時候使用者可能都不知道進行了哪些轉換。c 物件導向的多型特性,就是通過父類的型別實現對子類的封裝。通過隱式轉換,你可以直接將乙個子類的物件使用父類的型...