std::addressof
De 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>| Definido no cabeçalho <memory>
|
||
template< class T > T* addressof(T& arg); |
(desde C++11) | |
Obtains the actual address of the object or function arg, even in presence of overloaded operator&
Parâmetros
| arg | - | lvalue object or function |
Valor de retorno
Pointer to arg.
Exceções
Possível implementação
template< class T >
T* addressof(T& arg) {
return (T*)&(char&)arg;
}
|
Exemplo
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
}
Saída:
int** overload called with p = 0012FF64
Ptr overload called with p = 0012FF64
Veja também
| the default allocator (modelo de classe) | |
(C++11) |
fornece informações sobre como os tipos de ponteiro 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. (modelo de classe) |