如果定義這樣乙個結構體useless和_type,然後定義t是乙個_type結構體:
struct useless
;struct _type };
_type t;
怎麼求t的位址?
出一想,好像有點難,很顯然不能直接用&t來取位址,因為過載了&操作符。
其實這題利用了乙個技巧:既然對於t,編譯器知道它是_type型別,那麼就強制讓編譯器不把t當成_type型別,就是轉換它的「審美觀」:(char&)t,或者(int&)t或者(long&)t都可以,whatever,只要你隨便強制轉換下。
其中(char&)t:的意思是將t的位址一下sizeof(char)位元組當成char資料處理,把這塊位址當成整數看待,不管原來是什麼。
只要利用了這一條就可以採用取位址的操作了:&(int&)t就表示t的位址,但是現在:&(int&)t還是乙個int*指標, 最好還是轉換為_type*指標:
_type* q=(_type*)(&(int&)t);
這句的彙編**如下:
004113be lea eax,[t]
004113c1 mov dword ptr [p],eax
004113be lea eax,[t]
004113c1 mov dword ptr [p],eax
只不過,如果你這樣寫的話,q是乙個int*指標,下文你如果想用他操作_type型變數,編譯器就會報錯而已。
這樣就搞定了。有解釋不妥的地方,高手斧正。
另外如果向上文中,沒有過載const &的話可以這樣: const _type* p= (&(const _type)t);來求t的位址。但是如果過載了,如下所示:
useless operator & () const
就只能用上面_type* q=(_type*)(&(int&)t);的方法。
操作符過載
ifndef vertex h define vertex h class vertex vertex float px float py float pz vertex operator const vertex p vertex operator const vertex p void oper...
操作符過載
1.操作符是靜態方法,返回值表示操作結果,引數是運算元。2.操作符過載需要在過載的操作符前加上operator關鍵字。3.最好少用操作符過載,只有在意義明晰而且與內建類的操作一致時才適合使用,以免造成混亂。以建立的分數類 fraction 中的 為例,該分數類中有兩個int型的私有屬性 分子 num...
過載操作符
1.過載操作符1.1 限制過載操作符具有以下限制 1 只有c 預定義的操作符集中的操作符才可以被過載 2 對於內建型別的操作符,它的預定義不能被改變,應不能為內建型別過載操作符,如,不能改變int型的操作符 的含義 3 也不能為內建的資料型別定義其它的操作符 4 只能過載類型別或列舉型別的操作符 5...