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. |
<metanoindex/>
<tbody> </tbody>| 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&
Parameter
| arg | - | lvalue object or function |
Rückgabewert
Pointer to arg.
Ausnahmen
Mögliche Implementierung
template< class T >
T* addressof(T& arg) {
return (T*)&(char&)arg;
}
|
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
Siehe auch
| der Standardallokator (Klassen-Template) | |
(C++11) |
liefert Informationen über zeigerähnliche Typen (Klassen-Template) |