【发布时间】:2015-10-19 09:41:22
【问题描述】:
所以几天前我了解了 std::addressof。在http://en.cppreference.com/w/cpp/memory/addressof 给出了一个可能的实现:
template< class T >
T* addressof(T& arg)
{
return reinterpret_cast<T*>(
&const_cast<char&>(
reinterpret_cast<const volatile char&>(arg)));
}
据我所知,这可以简单地实现为:
template<typename T>
T* addressof( T& var )
{
return &var;
}
为什么 cppreference 的人选择使用 3 次强制转换来实现它?是否有任何我遗漏的细节可以使他们的实施更好。当你所做的只是强制转换时,使用 volatile 有什么意义?
【问题讨论】:
-
重载运算符的地址会破坏第二个实现。