std::addressof
来自cppreference.com
|
|
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
| Defined in header <memory>
|
||
| template< class T > T* addressof(T& arg); |
(C++11 起) | |
Obtains the actual address of the object or function arg, even in presence of overloaded operator&
目录 |
[编辑] 参数
| arg | - | lvalue object or function |
[编辑] 返回值
Pointer to arg.
[编辑] 例外
[编辑] 可能的实现
template< class T > T* addressof(T& arg) { return (T*)&(char&)arg; } |
[编辑] 为例
operator& may be overloaded for a pointer wrapper class to obtain a pointer to pointer:
#include <iostream> #include <memory> template<class T> struct Ptr { T* data; Ptr(T* arg) : data(arg) {} ~Ptr() {delete data;} T** operator&() { return &data; } }; template<class T> void f(Ptr<T>* p) { std::cout << "Ptr overload called with p = " << p << '\n'; } void f(int** p) { std::cout << "int** overload called with p = " << p << '\n'; } int main() { Ptr<int> p(new int(42)); f(&p); // calls int** overload f(std::addressof(p)); // calls Ptr<int>* overload }
Output:
int** overload called with p = 0012FF64 Ptr overload called with p = 0012FF64
[编辑] 另请参阅
| the default allocator (类模板) | |
| (C++11) |
提供有关类似指针的类型的信息 Original: provides information about pointer-like types The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (类模板) |