在没有&符号(&)运算符的情况下在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
正是为了这个目的
我正在为我正在编写的一个简单的容器库实现一个默认分配器,我想添加一个寻址方法来获取它工作的变量 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
正是为了这个目的