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

C++学习Day08之函数模板和普通函数的区别以及调用规则

目录

  • 一、程序及输出
    • 1.1 区别
      • 1.1.1 自动类型推导,不可以发生隐式类型转换的
      • 1.1.2 普通函数 可以发生隐式类型转换
    • 1.2 调用规则
  • 二、分析与总结


一、程序及输出

1.1 区别

1.1.1 自动类型推导,不可以发生隐式类型转换的

在这里插入图片描述

1.1.2 普通函数 可以发生隐式类型转换

#include<iostream>
using namespace std;//1、函数模板和普通函数的区别
template<class T>
T myAdd(T a , T b)
{return a + b;
}int myAdd2(int a, int b)
{return a + b;
}
void test01()
{int a = 10;int b = 20;char c = 'c';//myAdd(a, c); //如果使用自动类型推导,是不可以发生隐式类型转换的cout << myAdd2(a, c) << endl; //普通函数 可以发生隐式类型转换
}int main(){test01();system("pause");return EXIT_SUCCESS;
}

输出:
c的ASCII值为99,99+10=109
在这里插入图片描述

1.2 调用规则

如果函数模板和普通函数都可以调用,那么优先调用普通函数
如果想强制调用函数模板,可以使用空模板参数列表
函数模板也可以发生函数重载
如果函数模板能产生更好的匹配,那么优先使用函数模板

#include<iostream>
using namespace std;
template<class T>
void myPrint(T a ,T b)
{cout << "函数模板调用" << endl;
}
template<class T>
void myPrint(T a, T b ,T c)
{cout << "函数模板(T a, T b ,T c)调用" << endl;
}void myPrint(int a, int b)
{cout << "普通函数调用" << endl;
}
void test02()
{//1、如果函数模板和普通函数都可以调用,那么优先调用普通函数int a = 10;int b = 20;myPrint(a, b);//2、如果想强制调用函数模板,可以使用空模板参数列表myPrint<>(a, b);//3、函数模板也可以发生函数重载myPrint(a, b, 10);//4、如果函数模板能产生更好的匹配,那么优先使用函数模板char c = 'c';char d = 'd';myPrint(c, d);
}
int main(){test02();system("pause");return EXIT_SUCCESS;
}

二、分析与总结

函数模板与普通函数区别:
如果使用自动类型推导,是不可以发生隐式类型转换的
普通函数 可以发生隐式类型转换
调用规则
如果函数模板和普通函数都可以调用,那么优先调用普通函数
如果想强制调用函数模板,可以使用空模板参数列表
函数模板也可以发生函数重载
如果函数模板能产生更好的匹配,那么优先使用函数模板

http://www.lryc.cn/news/303557.html

相关文章:

  • Kaggle实践之《Home Credit Default Risk》的逐步优化
  • django rest framework 学习笔记-实战商城2
  • WEB 3D技术 three.js 3D贺卡(4) 添加鼠标滚轮移动屏幕 改变贺卡文字功能
  • 爬虫在网页抓取的过程中可能会遇到哪些问题?
  • Eclipse中Run As On Server和Run As Java Application
  • 【MySQL】库的操作——MySQL数据库 、库的操作、表的操作、字符集和校验规则、备份和恢复
  • pytorch 用F.normalization的逆归一化如何操作
  • LabVIEW多通道压力传感器实时动态检测
  • Jenkins解决Host key verification failed (2)
  • C#,数值计算,矩阵的乔莱斯基分解(Cholesky decomposition)算法与源代码
  • docker 备份 mysql
  • 使用C# Net6连接国产达梦数据库记录
  • docker (八)-dockerfile制作镜像
  • springcloud-网关(gateway)
  • 2.20 day2 QT
  • 【C++语法基础】4.分支和循环结构(✨新手推荐阅读)
  • 朋友圈程序全开源版源码,附带系统搭建教程
  • 思维方式系列文章目录 -《清单革命》实践
  • RAID 创建使用以及ubuntu安装和使用zfs文件系统及Ubuntu软件安装
  • yarn常用命令小记
  • 防御保护---内容保护
  • jquery将网页html文档导出为pdf图片
  • opengl 学习着色器
  • 【数据结构】18 二叉搜索树(查找,插入,删除)
  • 力扣日记2.20-【回溯算法篇】491. 非递减子序列
  • Android 13.0 SystemUI下拉状态栏定制二 锁屏页面横竖屏解锁图标置顶显示功能实现
  • FPGA_简单工程_拨码开关
  • LaunchPad 市场的复苏,Penpad 成新兴生力军
  • 知识图谱实战应用30-基于py2neo的天文学中的恒星、行星与卫星之间的关系知识图谱研究与应用
  • 笔试题详解(C语言进阶)