23

我有一个重载 unary 的类operator&。该类型的对象是使用创建的new,因此可以访问变量的地址,但现在我需要使用静态对象。是否有可能得到它的地址?

4

2 回答 2

36

在 C++11 或更高版本中,std::addressof(object), 由<memory>标头声明。

从历史上看,它更加怪诞,特别是如果您想正确处理constvolatile限定词。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 回答