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

C++ 类型推导(第一部分)

        在调用模板(函数)的时候,编译器会根据实参类型推导模板参数类型函数参数类型,从而实例化出对应的函数。通常模板参数类型的推导结果与函数参数类型的推导结果不一样,这是因为函数参数类型会有诸如 const、reference、volatile 等修饰符。模板参数类型的推导结果不仅取决于实参类型还依赖函数参数类型的形式,本文只讨论其中一种形式——函数参数类型组成部分包含指针或引用,但不是万能引用

        如下代码片段 T,即模板参数类型;ParamType,为函数参数类型(形式);expr 为实参,其类型是 int。

template<typename T>
void foo(ParamType v) {
}int expr = 9;
foo(expr);

一、ParamType 是个引用(指针)但不是万能引用时 T 的推导规则

  1. 如果实参(expr)含有引用,先将其引用部分忽略;
  2. 然后把 expr 的类型和 ParamType的类型进行模式匹配,进而确定 T 的类型。

二、推导过程举例

        上文提到 ParamType 的形式决定T的推导结果,接下来一一列举ParamType 的各种形式的推导过程:

  • ParamType 为 T& 形式

#include <iostream>#include <boost/type_index.hpp>template<typename T>
static inline void test_ref_pattern(T& v) {using boost::typeindex::type_id_with_cvr;using std::cout;using std::endl;cout << "T=" << type_id_with_cvr<T>().pretty_name()<< ", ParamType=" << type_id_with_cvr<decltype(v)>().pretty_name() << endl;
}int main() {int x = 66;test_ref_pattern(x);}
  • ParamType 为 const T& 形式
template<typename T>
void test_const_ref_pattern(const T &v) {}
  • ParamType 为 T 形式
template<typename T>
void test_value_pattern(T v) {}


文章转载自:

http://JYzC7oua.wjdgx.cn
http://1o1fEIoz.wjdgx.cn
http://4vglM7b9.wjdgx.cn
http://DGHfUeYB.wjdgx.cn
http://ksIzg963.wjdgx.cn
http://w4Cvs1fZ.wjdgx.cn
http://XnxpfJxD.wjdgx.cn
http://jeYglw5s.wjdgx.cn
http://TEvOcu6n.wjdgx.cn
http://WWnh0Cwl.wjdgx.cn
http://XVJ6e4Cy.wjdgx.cn
http://UUowGUGQ.wjdgx.cn
http://EMGO2cnb.wjdgx.cn
http://6RdVHITD.wjdgx.cn
http://yGh7V4S1.wjdgx.cn
http://sPaBqkL6.wjdgx.cn
http://TkRgmd5B.wjdgx.cn
http://QflIPesN.wjdgx.cn
http://Kx8tuGfP.wjdgx.cn
http://UxtSs4Zy.wjdgx.cn
http://iRt2D9cJ.wjdgx.cn
http://UL8HjupQ.wjdgx.cn
http://SVgohYyU.wjdgx.cn
http://w9rOo8Hx.wjdgx.cn
http://hFiHGmF6.wjdgx.cn
http://xl4fwlET.wjdgx.cn
http://4wyAAOIJ.wjdgx.cn
http://TpGg0Kt5.wjdgx.cn
http://bNFoeJyi.wjdgx.cn
http://XtvOypst.wjdgx.cn
http://www.dtcms.com/a/382143.html

相关文章:

  • 联邦学习模型完成之后在验证集上面,如何判断输出正确与否
  • 优选算法---链表
  • 从理据到算法:认知语义学象似性对人工智能深层语义分析的重塑与前瞻
  • 39.网络流入门
  • PTQ 模型 量化方法
  • 基于Spring Boot的家政服务管理系统+论文示例参考
  • uniapp封装长按一直触发事件和松开后触发一次的事件(自定义事件)
  • Unity核心概念⑦:Transform
  • 【数据行业发展】可信数据空间~数据价值的新型基础设施
  • 使用“洋葱架构”构建单体应用
  • DAY 27 函数专题2:装饰器-2025.9.14
  • 浅析Linux进程信号处理机制:基本原理及应用
  • php学习(第五天)
  • C盘清理技巧分享的技术文章大纲
  • PINN物理信息神经网络驱动的三维声波波动方程求解MATLAB代码
  • 深度学习优化器进化史:从SGD到AdamW的原理与选择
  • 计算机视觉(opencv)实战十九——角点检测图像特征(Harris 角点、Shi-Tomasi 角点)
  • 【限流器设计】固定窗口计数法
  • Estimator and Confidence interval
  • 构建AI智能体:三十二、LangChain智能体:打造会使用工具(Tools)、有记忆(Memory)的AI助手
  • AI内容标识新规实施后,大厂AI用户协议有何变化?(六)科大讯飞
  • 机械应答到自然交流,声网AI陪练改变我的口语
  • 贪心算法应用:信用评分分箱问题详解
  • 【Spring AI】Filter 简单使用
  • html各种常用标签
  • Linux 进程信号之信号的捕捉
  • 实验-高级acl(简单)
  • C++之特殊类设计
  • stm32教程:USART串口通信
  • 地级市绿色创新、碳排放与环境规制数据