我有一个重载了一元operator&
的课程。该类型的对象是使用new
创建的,因此可以访问变量的地址,但现在我需要使用静态对象。有可能得到它的地址吗?
答案 0 :(得分:37)
在C ++ 11或更高版本中,std::addressof(object)
由<memory>
标头声明。
从历史上看,它更加怪诞,特别是如果你想正确处理const
和volatile
限定符。 Boost实施addressof
时使用的一种可能性是
reinterpret_cast<T*>(
&const_cast<char&>(
reinterpret_cast<const volatile char &>(object)))
首先在转换为char&
时添加限定符,以便reinterpret_cast
可以正常工作,但object
合格;然后删除它们,以便最终的转换工作;然后最终获取地址并将其转换为正确的类型。只要T
具有与object
相同的限定符(它将作为从object
推导出的模板参数),结果指针将被正确限定。
答案 1 :(得分:31)
从C ++ 11开始,您可以使用函数std::addressof