news 2026/8/22 4:24:51

C++ 类型萃取(type_traits 类型萃取)(有空再看吧)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++ 类型萃取(type_traits 类型萃取)(有空再看吧)

c++泛型编程与模板_哔哩哔哩_bilibili

C++ 类型萃取(type_traits 类型萃取)

萃取 (Traits):利用模板特化(主模板 +template<>全特化 / 类偏特化),在编译期拿到类型的信息

全部逻辑发生在编译阶段,运行时无开销,是模板元编程基石。

简单讲:给一个类型 T,萃取器告诉你:是不是指针?是不是引用?是不是 int?是不是 const?

1、最简手写萃取示例(判断是否左值引用)

cpp

#include <iostream> // 主模板:默认情况,不是左值引用 template<typename T> struct is_lref { static constexpr bool value = false; }; // template<> 全特化,专门匹配 T& 左值引用类型 template<typename T> struct is_lref<T&> { static constexpr bool value = true; }; int main() { std::cout << is_lref<int>::value << '\n'; //0 int不是左值引用 std::cout << is_lref<int&>::value << '\n'; //1 int&是左值引用 std::cout << is_lref<int&&>::value << '\n'; //0 int&&右值引用不匹配 return 0; }

原理:编译器根据传入的类型,自动选择主模板 / 全特化版本。value是编译期常量。

2、标准库萃取 std::type_traits

C++11 起标准库自带大量萃取,头文件<type_traits>

表格

萃取器作用
std::is_lvalue_reference<T>::value是否左值引用
std::is_rvalue_reference<T>::value是否右值引用
std::is_pointer<T>::value是否指针类型
std::is_const<T>::value是否 const 修饰
std::is_same<T,U>::valueT、U 是否是同一个类型
std::remove_reference<T>::type去掉引用,拿到原始类型

示例:

cpp

#include <iostream> #include <type_traits> int main() { using T = int&&; std::cout << std::is_rvalue_reference<T>::value << '\n'; //1 // remove_reference:剥离引用 using RawT = std::remove_reference<T>::type; std::cout << std::is_same<RawT, int>::value << '\n'; //1 return 0; }

3、萃取核心用途(结合你之前左值右值引用)

场景 1:完美转发std::forward底层就是萃取

cpp

template<typename T> void func(T&& t) { // 根据T萃取原始类型,决定转左值还是右值 other(std::forward<T>(t)); }

std::forward内部就是靠remove_reference萃取去掉引用,再判断类型。

场景 2:编译期分支选择(if constexpr C++17)

编译期根据萃取结果走不同代码路径,不会生成无效运行时代码

cpp

template<t
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/22 4:24:45

数学建模习题解答:从算法应用到思维训练,掌握建模核心能力

1. 从“习题解答”到“建模思维”的跨越拿到《数学建模算法应用》这本书&#xff0c;很多同学的第一反应就是直奔后面的习题&#xff0c;试图通过“抄答案”来快速掌握建模方法。这本身无可厚非&#xff0c;毕竟习题是检验学习成果最直接的方式。但如果你仅仅把司守奎老师这本书…

作者头像 李华
网站建设 2026/8/22 4:24:35

MathorCup数学建模竞赛B题解析:列车时刻表优化与动态调度实战

1. 赛题核心&#xff1a;从“城市轨道交通”到“列车时刻表优化”的实战拆解如果你在2023年春天关注过数学建模竞赛&#xff0c;那么“MathorCup”这个名字一定不陌生。作为国内影响力颇大的高校数学建模挑战赛&#xff0c;它每年的B题往往聚焦于一个具体、复杂且极具现实意义的…

作者头像 李华
网站建设 2026/8/22 4:21:42

HTTP 5xx服务器错误全解析:从500到504的故障排查与防御体系构建

1. 从一次深夜告警说起&#xff1a;为什么5xx不只是“服务器挂了”凌晨两点&#xff0c;手机突然开始疯狂震动。打开监控平台&#xff0c;满屏的红色告警&#xff0c;核心服务的HTTP接口返回码清一色是“502 Bad Gateway”。开发群里瞬间炸开了锅&#xff0c;运维同事的第一反应…

作者头像 李华
网站建设 2026/8/22 4:21:06

多智能体系统全局Hopf分岔:中立型分布时滞下的对称周期振荡分析

1. 项目概述&#xff1a;从延迟到振荡&#xff0c;多智能体系统的动力学新视角最近在复现和拓展一些关于多智能体系统同步控制的仿真时&#xff0c;我遇到了一个有趣且棘手的问题&#xff1a;当系统中不仅存在常见的离散时滞&#xff0c;还引入了所谓的“中立型分布时滞”时&am…

作者头像 李华