C++ 获取c+中的内存地址+;无符号(&;)运算符

C++ 获取c+中的内存地址+;无符号(&;)运算符,c++,operator-overloading,memory-address,C++,Operator Overloading,Memory Address,我正在为我正在编写的一个简单容器库实现一个默认分配器,我想添加一个寻址方法,该方法可以获取变量x的内存地址,并且在x重载了&-运算符时也可以安全使用 查看MSVC STL源代码,我发现使用了函数\uuuu内置\uAddressOf(您的变量)。这是唯一的办法吗?我还发现,C++20中的STL分配器中已删除了address方法,但我不知道这是否是因为没有使用它,或者是否有新的更好的方法 我的实现如下所示: namespace mem_core { template <typename T&

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

查看MSVC STL源代码,我发现使用了函数
\uuuu内置\uAddressOf(您的变量)
。这是唯一的办法吗?我还发现,C++20中的STL分配器中已删除了
address
方法,但我不知道这是否是因为没有使用它,或者是否有新的更好的方法

我的实现如下所示:

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);
    }
}
namespace mem_核心{
模板
常量T*addressof(T和参数)无例外{
返回(参数)的内置地址;
}
模板
常量T*addressof(T&&arg)=删除;
//…更多mem_核心内容
}//名称空间mem_core end
模板
类分配器:public mem_core::base_分配器{//指的是base_分配器接口
公众:
T*地址(T和值)无例外{
返回mem_core::addressof(value);
}
}
正是为了这个目的

正是为了这个目的