考虑以下程序:
struct ghost
{
// ghosts like to pretend that they don't exist
ghost* operator&() const volatile { return 0; }
};
int main()
{
ghost clyde;
ghost* clydes_address = &clyde; // darn; that's not clyde's address :'(
}
如何得到clyde
的地址?
我正在寻找一种适用于所有类型对象的解决方案。 C++03 解决方案会很好,但我也对 C++11 解决方案感兴趣。如果可能的话,让我们避免任何特定于实现的行为。
我知道 C++11std::addressof
函数模板,但我对在这里使用它不感兴趣:我想了解标准库实现者如何实现此函数模板。
Use std::addressof.
您可以将其视为在幕后执行以下操作:
- 将对象重新解释为对 char 的引用
- 获取该地址(不会调用重载)
- 将指针强制转换回您类型的指针。
现有的实现(包括 Boost.Addressof)正是这样做的,只是需要额外注意const
and volatile
资格。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)