【问题标题】:std::addressof - strange implementationstd::addressof - 奇怪的实现
【发布时间】: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 有什么意义?

【问题讨论】:

标签: c++ std


【解决方案1】:

如果可以像您的示例中那样实现,则不需要它。关键是它会为您提供对象的地址,即使该类型的 operator&amp; 的地址已被重载。

【讨论】:

  • 啊哈,我明白了。转换为 const volatile& 而不仅仅是 char& 有什么意义?
  • @GeneralFailure 这样你就可以传递constvolatile 合格的左值。您可以尝试将其删除以查看。
猜你喜欢
  • 2017-10-24
  • 2012-06-02
  • 1970-01-01
  • 2014-02-23
  • 2017-09-15
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多