草庐IT

addressof

全部标签

c++ - addressof的实现

以前不知道std::addressof的存在,为什么它存在对我来说是有意义的:作为在重载的情况下获取地址的一种方式operator&.然而,实现稍微不透明。来自gcc4.7.1:templateinline_Tp*__addressof(_Tp&__r)_GLIBCXX_NOEXCEPT{returnreinterpret_cast(&const_cast(reinterpret_cast(__r)));}reinterpret_cast很明显。剩下的就是黑魔法了。有人可以分解一下这实际上是如何工作的吗? 最佳答案 首先你有__r类

c++ - 何时使用 addressof(x) 而不是 &x?

在获取对象的地址时,如何确定是否需要addressof(x)而不是&x?似乎这个问题令人困惑,所以需要澄清一下:addressof显然绕过了重载的地址操作符。我已经知道了。我想知道的是:我怎么知道这是否是我真正想做的事情?(尤其是在模板内等时)是否有某种“规则”可以帮助我确定何时需要addressof而不是&?毕竟,它们都返回对象的“地址”,那么我什么时候使用呢? 最佳答案 您在必要时使用std::addressof。可悲的是,“当你必须”包括任何时候你在模板代码中工作并想要将未知类型的变量T或T&变成一个诚实的指针到那个变量的内存

c++ - 在 C++ 中使用 std::addressof() 函数模板而不是使用 operator& 有什么好处吗?

这个问题在这里已经有了答案:Whentouseaddressof(x)insteadof&x?(5个回答)关闭7年前。如果addressofoperator&运行良好,那么为什么C++引入了addressof()函数?&运算符从一开始就是C++的一部分-为什么要引入这个新函数?它比C的&运算符有什么优势吗? 最佳答案 一元operator&可能会为类类型重载,从而为您提供除对象地址之外的其他内容,而std::addressof()将始终为您提供其实际地址.Contrivedexample:#include#includestruct
12