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. |
| Defined in header <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 }
Output:
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. (クラステンプレート) |