c ++获取变量的地址而不使用运算符&

时间:2014-10-30 13:47:39

标签: c++ memory memory-management addressof

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

2 个答案:

答案 0 :(得分:37)

在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推导出的模板参数),结果指针将被正确限定。

答案 1 :(得分:31)

从C ++ 11开始,您可以使用函数std::addressof