function template
<memory>

std::addressof

template <class T> T* addressof (T& ref) noexcept;
物件或函式的地址
返回ref所引用的物件或函式的地址。

此函式即使在存在過載的引用運算子(operator&).

引數

ref
一個物件或函式。

返回值

指向物件或函式的指標。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// addressof example
#include <iostream>
#include <memory>

struct unreferenceable {
  int x;
  unreferenceable* operator&() { return nullptr; }
};

void print (unreferenceable* m) {
  if (m) std::cout << m->x << '\n';
  else std::cout << "[null pointer]\n";
}

int main () {
  void(*pfn)(unreferenceable*) = std::addressof(print);

  unreferenceable val {10};
  unreferenceable* foo = &val;
  unreferenceable* bar = std::addressof(val);

  (*pfn)(foo);   // prints [null pointer]
  (*pfn)(bar);   // prints 10

  return 0;
}

輸出
[null pointer]
10