std::addressof
Aus 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. |
definiert in Header <memory>
|
||
template< class T > T* addressof(T& arg); |
(seit C++11) | |
Obtains the actual address of the object or function arg
, even in presence of overloaded operator&
Inhaltsverzeichnis |
[Bearbeiten] Parameter
arg | - | lvalue object or function |
[Bearbeiten] Rückgabewert
Pointer to arg
.
[Bearbeiten] Ausnahmen
[Bearbeiten] Mögliche Implementierung
template< class T > T* addressof(T& arg) { return (T*)&(char&)arg; } |
[Bearbeiten] Beispiel
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
[Bearbeiten] Siehe auch
der Standardallokator (Klassen-Template) | |
(C++11) |
liefert Informationen über zeigerähnliche Typen (Klassen-Template) |