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. |
| Заголовочный файл <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 }
Вывод:
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. (шаблон класса) |