当前位置: 首页 > news >正文

c++之std::remove_pointer

该函数是一个模板函数,移除T类型的指针类型,如果T类型不是指针,那么去除的类型与T类型相同。

语法:

#include <type_traits>template <class T>
using remove_pointer_t = typename std::remove_pointer<T>::type;

 

#include <type_traits>
#include <iostream>int main() {
// Example 1: Removing pointer qualifiers
static_assert(std::is_same_v<std::remove_pointer_t<int*>, int>, "int* becomes int");
static_assert(std::is_same_v<std::remove_pointer_t<int**>, int*>, "int** becomes int*");
static_assert(std::is_same_v<std::remove_pointer_t<int>, int>, "int remains int");// Example 2: Using with const and volatile pointers
static_assert(std::is_same_v<std::remove_pointer_t<const int*>, int>, "const int* becomes int");
static_assert(std::is_same_v<std::remove_pointer_t<int* const>, int>, "int* const becomes int");// Example 3: Practical application
int value = 42;
int* ptr = &value;
std::remove_pointer_t<int*> dereferenced_value = *ptr; // deduces to int
std::cout << "Dereferenced value: " << dereferenced_value << std::endl;return 0;
}

 

实际应用:

模板编程:它通常用于泛型编程,用于推断指针的基本类型并对其进行操作。

智能指针:使用 std::unique_ptr 或 std::shared_ptr 时,std::remove_pointer_t 可以帮助确定智能指针管理的基础类型。

自定义删除器:在使用自定义删除器的场景中,std::remove_pointer_t 确保为资源管理推导出正确的类型。

#include <memory>
#include <type_traits>
#include <iostream>void custom_deleter(int* ptr) {
std::cout << "Deleting pointer: " << ptr << std::endl;
delete ptr;
}int main() {
std::unique_ptr<std::remove_pointer_t<int*>, decltype(&custom_deleter)> smart_ptr(new int(10), custom_deleter);
std::cout << "Value: " << *smart_ptr << std::endl;return 0;
}

 

重要说明

如果类型不是指针,std::remove_pointer_t 会保持其不变。

它可以处理 const、volatile 和 const volatilepointer, 在保留基础类型限定符的同时剥离 pointer。

为 std::remove_pointer_t 添加特殊功能是未定义的行为,应该避免。

Std::remove_pointer_t 是现代 C++ 中用于类型操作的强大工具,在模板密集型代码库中特别有用。

http://www.wxhsa.cn/company.asp?id=6426

相关文章:

  • 研究生化学英文题库数据集:300万条LaTeX格式AI训练资源,覆盖有机化学物理化学无机化学分析化学,用于智能评估系统、个性化学习平台、化学知识图谱构建、自动化工具开发、深度学习模型
  • lvm硬盘分区与不分区优缺点
  • 中电金信能碳虚拟电厂数智化平台破局“双碳”难题
  • 充分验证用户需求和商业价值,是软件创业者首要解决的问题
  • 国产DevOps工具链崛起:Gitee如何赋能企业数字化转型
  • milvus创建一个用户管理多个库
  • 为什么ceph新添加的硬盘会自动变为osd
  • Zabbix Proxy 技术实践与运维思考
  • OF SF CF ZF 的判断方式以及例子
  • 2025年30个CRM系统盘点:哪款CRM系统适合你的企业? - SaaS软件
  • TSN Qav测试实践
  • adobe illustrator中生成连续直角线段
  • 多重分形去趋势交叉相关性分析
  • 智启燃气新未来丨众智鸿图精彩亮相2025燃气运营与安全研讨会 - 教程
  • 燕千云ITR平台引领服务流管理革命,构建企业客户服务智慧生态
  • WPF 容器尺寸行为总结
  • 在adobe illustrator中如何插入大于、小于号
  • 三分钟了解流量卡的选择
  • SARIMA算法
  • 【IEEE出版|EI检索稳定】第四届云计算、大数据应用与软件工程国际学术会议(CBASE 2025)
  • Gitee推出革命性MCP Server:AI深度参与开发全流程 开启智能协作新时代
  • 用机器语言实现循环
  • 取证 - voasem
  • django对接drf-spectacular替代swagger
  • 可画
  • Symbol VBRK: Invalid data type u SAP 事务成功新号码获取到 但是提交后提示失败如何处理
  • Oracle 19c asm单机OPatch补丁报错checkSystemCommandAvailable failed.
  • three.js中怎么加载 .gltf/glb格式 文件
  • ollama如何安装使用
  • 【SPIE独立出版|连续多年EI稳定检索】第七届地球科学与遥感测绘国际学术会议(GRSM 2025)