關於 addressof的實作

看板C_and_CPP (C/C++)作者 (小嫩)時間10年前 (2015/12/30 19:01), 編輯推噓1(107)
留言8則, 1人參與, 最新討論串1/1
網站上寫的possible implementation是 template< class T > T* addressof(T& arg) { return reinterpret_cast<T*>( &const_cast<char&>( reinterpret_cast<const volatile char&>(arg))); } 請問各位 要是我 也只會寫出最外層轉型 他多那兩次轉型,有什麼目的或是為了可攜性嗎? 因為我想不透只寫最外層的轉型會有什麼問題 ,難道會再某些情況出問題? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.12.163.223 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1451473303.A.635.html

12/30 19:33, , 1F
你看到的地方下幾行有個連結到這裡
12/30 19:33, 1F

12/30 19:34, , 2F

12/30 19:34, , 3F
這個回答往下數幾個到 http://stackoverflow.com/a/6494964
12/30 19:34, 3F

12/30 19:35, , 4F
以及這個問題本身即是你所想要的原因
12/30 19:35, 4F

12/30 19:35, , 5F
簡答: 這是為了閃過有哪個怪胎去 overload operator &
12/30 19:35, 5F

12/30 19:37, , 6F
解法是利用 reinterpret_cast 的定義將這參考硬轉成 char&
12/30 19:37, 6F

12/30 19:37, , 7F
const volatile 是為了當你原來的東西有 const volatile
12/30 19:37, 7F

12/30 19:38, , 8F
時所用的, 不然不給你轉; 之後再用 const_cast 拿掉它們
12/30 19:38, 8F
文章代碼(AID): #1MWxcNOr (C_and_CPP)
文章代碼(AID): #1MWxcNOr (C_and_CPP)