使用std :: addressof()函数模板,而不是在C ++中使用&(地址)运算符有什么好处吗?

如果addressof运算符运行良好,那么为什么C ++引入了addressof()函数? &运算符从一开始就是C ++的一部分 – 为什么这个新函数被引入呢? 它是否比C &运营商提供任何优势?

一元运算operator&可能会被重载类types给你东西以外的对象的地址,而std::addressof()将永远给你它的实际地址。
被举的例子 :

 #include <memory> #include <iostream> struct A { A* operator &() {return nullptr;} }; int main () { A a; std::cout << &a << '\n'; // Prints 0 std::cout << std::addressof(a); // Prints a's actual address } 

如果你想知道这样做是否有用:
存在超载一元运算符的合理原因?