std::to_address

定义于头文件 <memory>
template< class Ptr >
auto to_address(const Ptr& p) noexcept;
(1) (C++20 起)
template< class T >
constexpr T* to_address(T* p) noexcept;
(2) (C++20 起)

获得 p 所指向的地址,而不形成到被指向者的引用:

1) 缀饰指针重载:若表达式 std::pointer_traits<Ptr>::to_address(p) 为良式,则返回该表达式的结果。否则,返回 std::to_address(p.operator->())
2) 裸指针重载:若 T 为函数类型,则程序为病式,否则返回不修改的 p

目录

参数

p - 缀饰或裸指针

返回值

表示与 p 所表示者相同地址的裸指针。

注意

即使在 p 引用的存储中无已构造的对象时,也能使用 std::to_address ,该情况下不能用 std::addressof(*p) ,因为无将 std::addressof 参数绑定到的合法对象。

示例

参阅

提供关于类指针类型的信息
(类模板)
[静态] (C++20)
从缀饰指针获得裸指针( pointer_to 的反函数)
(std::pointer_traits 的公开静态成员函数)

版本历史

  • (当前 | 先前 2017年11月14日 (二) 18:46D41D8CD98F讨论 | 贡献 . . (1,302字节) (-12). . 注意 (撤销)
  • 当前 | 先前) 2017年11月14日 (二) 08:15Fruderica讨论 | 贡献. . (1,314字节) (+1,314). . (以“{{cpp/title|to_address}} {{cpp/memory/navbar}} {{dcl begin}} {{dcl header | memory}} {{dcl |num=1|since=c++20|1= template< class Ptr > auto to_address(const Ptr& p) ...”为内容创建页面)