std::addressof
Da 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. |
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&
Índice |
[editar] Parâmetros
arg | - | lvalue object or function |
[editar] Valor de retorno
Pointer to arg
.
[editar] Exceções
[editar] Possível implementação
template< class T > T* addressof(T& arg) { return (T*)&(char&)arg; } |
[editar] 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
[editar] 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) |