作者dreamboat66 (小嫩)
看板C_and_CPP
標題關於 addressof的實作
時間Wed Dec 30 19:01:41 2015
網站上寫的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
推 LPH66: 你看到的地方下幾行有個連結到這裡 12/30 19:33
→ LPH66: 以及這個問題本身即是你所想要的原因 12/30 19:35
→ LPH66: 簡答: 這是為了閃過有哪個怪胎去 overload operator & 12/30 19:35
→ LPH66: 解法是利用 reinterpret_cast 的定義將這參考硬轉成 char& 12/30 19:37
→ LPH66: const volatile 是為了當你原來的東西有 const volatile 12/30 19:37
→ LPH66: 時所用的, 不然不給你轉; 之後再用 const_cast 拿掉它們 12/30 19:38