使用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 }
如果你想知道这样做是否有用:
存在超载一元运算符的合理原因?