我有一个重载 unary 的类operator&
。该类型的对象是使用创建的new
,因此可以访问变量的地址,但现在我需要使用静态对象。是否有可能得到它的地址?
问问题
7237 次
2 回答
36
在 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
),结果指针将被正确限定。
于 2014-10-30T13:55:45.413 回答
30
从 C++11 开始,您可以使用函数std::addressof
于 2014-10-30T13:49:39.873 回答