在没有&符号(&)运算符的情况下在c ++中获取内存地址

Getting memory address in c++ without ampersand (&) operator

我正在为我正在编写的一个简单的容器库实现一个默认分配器,我想添加一个寻址方法来获取它工作的变量 x 的内存地址,并且当 x 重载 &-运算符时也可以安全使用。

查看 MSVC STL 源代码,我发现使用了函数 __builtin_addressof(your_variable)。这是唯一的方法吗?我还发现 address 方法已从 C++20 中的 STL 分配器中删除,但我不知道这是因为它没有被使用,还是有新的更好的方法。

我的实现看起来像这样:

namespace mem_core {

template <typename T>
const T* addressof(T& argument) noexcept {
    return __builtin_addressof(argument);
}

template <typename T>
const T* addressof(T&& arg) = delete;

//... more mem_core stuff

} //namespace mem_core end

template <typename T>
class allocator : public mem_core::base_allocator<T> { // refers to base_allocator interface
public:
    T* address(T& value) noexcept {
        return mem_core::addressof(value);
    }
}

std::addressof 正是为了这个目的