過載取位址操作符後怎麼求位址?

2021-06-17 16:21:48 字數 957 閱讀 5655

如果定義這樣乙個結構體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...