gpt4 book ai didi

c++ - 当 operator& 重载时,如何可靠地获取对象的地址?

转载 作者:IT老高 更新时间:2023-10-28 11:29:27 24 4
gpt4 key购买 nike

考虑以下程序:

struct ghost
{
// ghosts like to pretend that they don't exist
ghost* operator&() const volatile { return 0; }
};

int main()
{
ghost clyde;
ghost* clydes_address = &clyde; // darn; that's not clyde's address :'(
}

我如何获得clyde的地址?

我正在寻找一种同样适用于所有类型对象的解决方案。 C++03 解决方案会很好,但我也对 C++11 解决方案感兴趣。如果可能,让我们避免任何特定于实现的行为。

我知道 C++11 的 std::addressof 函数模板,但对在这里使用它不感兴趣:我想了解标准库实现者如何实现这个函数模板.

最佳答案

使用 std::addressof .

您可以将其视为在幕后执行以下操作:

  1. 将对象重新解释为对字符的引用
  2. 取那个地址(不会调用重载)
  3. 将指针转换回您的类型的指针。

现有的实现(包括 Boost.Addressof)正是这样做的,只是额外注意 constvolatile 限定。

关于c++ - 当 operator& 重载时,如何可靠地获取对象的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6494591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com