【问题标题】:c++ get address of variable without operator&c ++在没有运算符的情况下获取变量的地址&
【发布时间】:2014-12-26 14:19:42
【问题描述】:

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

【问题讨论】:

  • unary operator& 真的超载了吗?
  • @FredLarson 我也很惊讶:en.wikipedia.org/wiki/…
  • @KugBuBu:是的,我看到它可以超载。但是在这种情况下,这个问题实际上是超载的并没有明确说明。我见过类重载二进制operator&(例如,用于字符串连接)。一元运算符重载是不常见的。
  • @FredLarson:如果不是关于一元运算符,这个问题会相当琐碎。
  • 基本同一个问题stackoverflow.com/q/1142607/57428

标签: c++ memory memory-management addressof


【解决方案1】:

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

从历史上看,它更怪诞,特别是如果您想正确处理 constvolatile 限定符。 Boost 的addressof 实现使用的一种可能性是

reinterpret_cast<T*>(
    &const_cast<char&>(
        reinterpret_cast<const volatile char &>(object)))

首先在转换为char&amp; 时添加限定符,以便reinterpret_cast 可以工作,但object 是合格的;然后删除它们,以便最终转换起作用;然后最后获取地址并将其转换为正确的类型。只要Tobject 具有相同的限定符(它将作为从object 推导出的模板参数),则生成的指针将被正确限定。

【讨论】:

  • 这也是GCC实现std::addressof的方式
  • 和 VC++ 的实现几乎相同。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-21
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 2018-09-12
    • 1970-01-01
    相关资源
    最近更新 更多